今週のrailscasts
今週のrailscastsはActiveRecord::Base.findのオプションである:includeと:joinsの違いについて。
Railscasts - Include vs Joins
includeとjoinsはどう違うか
簡単に書くと
- joins
- 関連テーブルは後で読む
- include
- 関連テーブルは先に読む
という感じ。関連テーブルの情報を使わないのであればjoins、使うならincludeというところかな。
関連のネスト
下記のようにネストした関連もjoins, includeできる
Comment.all(:joins => {:user => :memberships}, :conditions => { :memberships => { :group_id => g.id } })
scopedメソッド
findメソッドをscopedに差し替えることで、named_scope風に検索条件をメソッドチェーンすることができる。
その他
本筋とは関係ないけど、へーと思ったことについて。
conditionsオプションにhashが使える
今まで配列ばっかり使ってた><
selectオプションやgroupオプションを使って関連テーブルの数を調べられる
下記のようなコードを実行すると、user.comments_countでコメントの個数を調べることが出来る。
user = User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")
pluralizeメソッド
これは覚えたい
pluralize(2, 'person') #=> people
all
find(:all, *args)使うなら all(*args)を使う方がスマート