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,)