2

こんなお問い合わせがあり、

company.users.select("users.id, users.state").includes(:organization)

ここで、アソシエーションを熱心にロードしていorganizationます。オブジェクトで属性 id と user_id がフェッチされることを期待していましたが、すべてのフィールドがフェッチされます。

これが方法ですか、熱心な読み込み時にレールが動作するのですか、それともここに何かが欠けていますか?

4

1 に答える 1

0

あなたの場合、組織ではなくすべての会社のユーザーを取得します。

イーガー ロードとは、データベースの行を事前にロードすることを意味します。属性だけを取得するわけではありません。関連するすべての行をロードします。

例えば:

 comments = Comment.all(:select => "users.name,comment_text", :include => :user)

ここでは、ユーザー テーブルから名前をロードするだけではありません。データベースからすべてのユーザー行を取得します。したがって、余分なクエリを起動する必要はありません。includeもう1つ、含まれているテーブルの属性がある場合、select句を使用すると無視されます。詳細については、結合とインクルードに関するライアン・ベイツのリアルキャストを参照してください: http://railscasts.com/episodes/181-include-vs-joins

于 2013-02-01T15:33:24.260 に答える