こんなお問い合わせがあり、
company.users.select("users.id, users.state").includes(:organization)
ここで、アソシエーションを熱心にロードしていorganization
ます。オブジェクトで属性 id と user_id がフェッチされることを期待していましたが、すべてのフィールドがフェッチされます。
これが方法ですか、熱心な読み込み時にレールが動作するのですか、それともここに何かが欠けていますか?
こんなお問い合わせがあり、
company.users.select("users.id, users.state").includes(:organization)
ここで、アソシエーションを熱心にロードしていorganization
ます。オブジェクトで属性 id と user_id がフェッチされることを期待していましたが、すべてのフィールドがフェッチされます。
これが方法ですか、熱心な読み込み時にレールが動作するのですか、それともここに何かが欠けていますか?
あなたの場合、組織ではなくすべての会社のユーザーを取得します。
イーガー ロードとは、データベースの行を事前にロードすることを意味します。属性だけを取得するわけではありません。関連するすべての行をロードします。
例えば:
comments = Comment.all(:select => "users.name,comment_text", :include => :user)
ここでは、ユーザー テーブルから名前をロードするだけではありません。データベースからすべてのユーザー行を取得します。したがって、余分なクエリを起動する必要はありません。include
もう1つ、含まれているテーブルの属性がある場合、select句を使用すると無視されます。詳細については、結合とインクルードに関するライアン・ベイツのリアルキャストを参照してください: http://railscasts.com/episodes/181-include-vs-joins