maeshimaの日記

メモ書きです

今週の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)を使う方がスマート