2011-11-10 23 views
5

良い答えがあるかどうかわかりません。のは、私が持っているとしましょう:Rails:オブジェクトの配列の関係を取得する

users.photos #=> Returns all photos this group of users has 

をし、単にそれらを反復処理することなく、すべての写真を取り戻す:

users = User.where(:location => "Utopia") #=> Returns [user1,user2,user3,user4] 

私のような何かをしたいと思います。各繰り返しはDB呼び出しであるので、私は尋ねる。単一のDB呼び出しを行う良い方法はありますか?

users = User.where(:location => 'Utopia').includes(:photos) 

別の1回のパスでのユーザー、そして関係とそれに関連する写真を取得します:

答えて

5

これを実行する最も簡単な方法は、熱心ローダーを使用することです。

photos = Photo.includes(:user).where('users.location' => 'Utopia') 

部12でActive Record Query Interface documentationで利用可能なより多くの情報があります:あなたはそれはあなたの呼び出しですが、それはこのようなものを見てみましょう、JOINまたは副選択を使用するかどうかは、1つのコールにそれをすべてを包むことができます。

+1

LOJではなく内部結合を行う方が効率的です - 'photos = Photo.joins(:user).where(:users => {:location => 'Utopia'})' – mnelson

+0

結合を実行する際に使用するキーを指定することは可能ですか?関係は ':has_many:through'を通して設定され、戻り値は間違ったキーセットを使用します。 – Justin

関連する問題