railsで複数のテーブルから検索結果を取得する findパラメーターの :include と :joins
:inlcude したテーブルに :select が使えない罠
テーブル.findで複数のテーブルから指定したカラムのデータを取得したい場合、
result = hoge.find(:all,
:include => "foo",
:select => "hoge.id, foo.id"
:conditions => ["hoge.updated_at > ? and hoge.updated_at < ?", min_date, max_date],
:limit => 10,)
とやると、期待した結果が得られません。
どうやら:includeが:selectの指定を上書きしてしまうようです。
発行されたsqlを確認してみると、"foo.id"が欲しいところを"foo.*"としてしまっています。
複数のテーブルから指定したカラムのデータを取得したい場合は、下記のように":joins"を使いましょう。
result = hoge.find(:all,
:joins => 'LEFT JOIN foo ON hoge.id = foo.id',
:select => "hoge.id, foo.id",
:conditions => ["hoge.updated_at > ? and hoge.updated_at < ?", min_date, max_date],
:limit => 10,)