railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

rails

hashに対してtryする(hash#fetch、nil#try)

hashから要素を取り出すとき、nilだとエラーとなります。 [1] pry(main)> {}[:nanika] => nil [2] pry(main)> nil[:nanika] NoMethodError: undefined method `[]' for nil:NilClass そこでtryの登場ですが、hash#fetchは登録キーがないとエラーがはみ出てき…

ruby リファクタリングするときとか、まず見る

[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita [初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita

delegateが便利。

Hoge.rb .... has_many: fuga def foobar .... Fuga.rb ... belongs_to hoge delegate :foobar, to: :hoge ... とすると、 Fuga.foobar って感じなのができるようです。 delegate (Module) - APIdock

rails cookieから属性を消す

cookieから属性を消すことは重要です。 rails4ではcookieの内容は暗号化されてclient側に保存されていますが、 復号化せずにサーバーに送信すれば正常なcookieとして取り扱われるため、cookieファイルを盗まれるとなりすましが可能となります。 cookieに有効…

cookieのsecure属性について

cookieのsecureをtrueにする。 trueにした属性は、https以外の通信でcookieを送信しなくなる。 httpsとhttpの行き来がある様なサイトは、セッションIDなどをsecure属性にしないとセッションハイジャックされる可能性がある。 secure属性と直接関係はないが、…

belongs_toに別名を定義する

## Hoge.rb class Hoge < ActiveModel belongs_to :nanika alias_method :something, :nanika # Hoge.somethingをコールするとnanikaが拾えます。

コントローラーの仕事について考える会

before_filterを使うとコントローラーが綺麗になる、と。 めもめも Railsのコントローラーの仕事は何か? - Qiita Railsのコントローラーの仕事は何か? - Qiita

モデルをJSON形式で返す

モデルをJSON形式で返す Model.all.as_json

中間テーブルの命名について

中間テーブルは基本、多対多のモデルの関連をつくるために用いているので、 中間テーブル自体は意味のあるデータを持つことは少ない。 XyzToAbcというモデル名を見ると、「中間テーブル」だと推測できます。

クラスに定義した関数の実行前後をhookする「method_hooker」

Ruby - メソッドの実行をフックする方法 - Qiita Ruby - メソッドの実行をフックする方法 - Qiita Gemfile gem 'method_hooker' class Hoge def self.hoge1 .. end def pre_hoge p 'pre hoge has executed' end pre_execute_method :pre_hoge Hoge.hoge1 #=>…

サービスクラスについて

レビューの指摘事項として「モデルではなくサービスに移動しなさい」というものがありました。 サービスっていうのが良くわからなかったので先生に聞いてみました。 Railsでサービスとフォームを導入してみる話 - assertInstanceOf('Engineer', $a_suenami) …

メソッドの長さについて

メソッドの長さは4〜5行しばりのプロジェクトもあるらしいです。 とのこと。

deviseでユーザの情報を更新したあとに飛ばす

deviseの機能でこんなのあるんだ、っていう驚き。 after_update_path_for(resource) xxx_path(resource) end

ActiveRecord::Relationを返すならscope

def self.availables where(available: true) end scope :availables, -> { where(available: true) } scopeチェーンできるもの(ActiveRecord::Relationが返るもの)はscopeで、 Relation以外の戻り値を返すものは、クラスメソッドに整理しておけば、 新しく…

routes.rbについてバグ注意

railsでupdateを実装してリリースしたところ、既存機能が動かなくなるバグを出してしまった。 原因はconfig/routes.rbでした。 config/routes.rb resources :foos, only: [:index, :create, :update] #<- ここにupdateを足しました。 patch 'foos/bar' route…

railsでログローテーション

へぇ〜。 config/environments/production.rb config.logger = Logger.new("log/production.log", 5, 10 * 1024 * 1024) 10MBで5世代管理になるみたい。 こっちのほうが分かりやすい。 config.logger = Logger.new("log/production.log", 5, 10.megabytes) …

(未解決事件)再現せず:arel_tableで生成したSQLを投げた後はeachの状態を保管しておかないと、データが参照できなくなっちゃいました

arel_tableは関係ないかもしれないけど、arel_tableで生成したSQLを投げた後はeachの状態を保管しておかないと、データが参照できなくなっちゃいました。 が、後で試してみたら再現しなかったです。 いつか再現したときのためにメモを残しておきます。 ×-> r…

rails4.1.0だったため、squeelを断念した

squeelはArelTableのラッパーだから、簡単に書けるはず、とおもって、gemをワクテカしながらgemをインストールしたらbundle exec rails consoleが上がらなくなった。もちろんrails sも。 railsのバージョンを上げれば解決できるようです。 Gemfile gem 'sque…

arel_tableで使えたグループ関数

ほんの少しですが、 arel_table[:column].count arel_table[:column].count.as('alias_name') arel_table[:column].minimum arel_table[:column].sum arel_table[:column].eq('nanika')

arel_tableを利用してexistsの外部副問い合わせを実現する

ActiveRecordで複雑なことをやろうとするとarel_tableだと伺いまして。 準備 rails -v Rails 4.1.0 ruby -v ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0] rails new test_app cd test_app rails g model yamada name:string rails g mode…

ActiveRecordで自己結合する

データ分析の集計上、自己結合しなきゃいけなかったので調べてみた。 以下の感じで、自己結合できます。 message.rb class Message < ActiveRecord::Base belongs_to :item has_many :own_join, -> class_name: Message, primary_key: 'item_id', foreign_ke…

coffeescriptでrailsの値を参照したかったらerbやhamlを検討してみる

sprocketsを使うと、拡張子の後ろから展開してくれる(アセットパイプライン) 以下の様な感じで書くと、railsで生成した値(@name)をcoffeescriptから参照できるみたいです。 xxx.js.coffee.erb alert(<%= @name %>)

rubyでクラスのメソッド一覧を調べたい

Class.methods Class.methods.sort Class.methods.grep(/destroy/) おもいっきり参考にさせていただきました。 Rubyでメソッド一覧を確認するmethodsメソッドが便利 - paranitips Rubyでメソッド一覧を確認するmethodsメソッドが便利 - paranitips

require_treeするとstubしていないものは、コンパイルしてapplication.jsにまとまる

require_treeするとstubしていないものは、コンパイルしてapplication.jsにまとまる app/assets/javascripts/application.js //= require_tree . stubするとapplication.jsにまとまらなくなる app/assets/javascripts/application.js //= stub foobar //= re…

(未解決事件)俺の環境でRailsAdminが動かない

俺の環境でRailsAdminが動かない。 他のメンバーの環境だと同じソースコードで動いているので、俺の環境がおかしいみたい。 http://localhost:3000/admin Routing Error No route matches [GET] "/admin" メモ Rails_Admin shows Routing Error "No route ma…

RailsAdminでエラー

RailsAdminでエラー 読み込みディレクトリを追加したところ、エラーが発生したとのことでした。 sferik/rails_admin Circular dependency detected while autoloading constant · Issue #1697 · sferik/rails_admin · GitHub 読み込もうとしたDirオブジェク…

eager_load_pathsとautoloadについて

Don't forget about eager_load when extending autoload paths Don't forget about eager_load when extending autoload paths - Arkency Blog autoload_pathsとeager_load_pathsにxxx_xxx.rbが入っているディレクトリを指定するとrailsを起動しただけでモ…

チャットワークをrubyから使う

アカウントの作成 http://www.chatwork.com/ja/ チャットワークAPIの申請 https://www.chatwork.com/service/packages/chatwork/subpackages/api/apply_beta.php チャットワークAPI http://developer.chatwork.com/ja/index.html gem asonas/chatwork-ruby C…

(未解決事件)bundle exec rails consoleにてSetting.ymlの内容が反映されない

config/Settings.ymlを編集後bundle exec rails consoleしてもSettings.ymlの内容が更新されていない。 なんかキャッシュされている様な気がする。 lib/rails_config.rb @@_ran_once = false ...(省略) def self.setup yield self if @@_ran_once == false @…

bundle execにrubyファイルを渡す

bundle exec rails runner [ruby_file]