2016-09-12 1 views
0

私は基本的な疑問を持っています。私のrailsアプリでは、userにはscoresがたくさんあります。ユーザーのアクティブな関係のすべてのスコアを取得する方法はありますか。私はuser.scores(明らかに)をすることができますが、ユーザがユーザグループであれば、私はusers.scoresのような何かをする必要があります。これは明らかに正しくありません。Rails:すべてのhas_manyオブジェクトが親のアクティブな関係に関連付けられていることを取得する

答えて

1

あなたはこれが

select * from scores where user_id in (select *.id from users where ..) 
+0

グッドマン。多くのありがとう – GhostRider

0

ようなSQLを構築します

Score.where(user: users) 

を使用することができますが、以下を試してみましたか?

@users.collect(&:scores).flatten! 
+0

私は受け入れられた答えがより効率的だと思います。私が間違っていると私を訂正してください。 – GhostRider

+0

どちらも同じ 'sql'を生成します。どちらを使用するかは、あなたのシナリオや他のコンテキストに依存します。どちらの方法でも、私はこのロジックをテスト容易性とメンテナンスのためのモデルに移行します。 – Dharam

+0

あなたは@Dharamが正しくありません。あなたのコードはN + 1のクエリを生成します。しかし、 'includes'を使って改善することができます:' @ users.includes(:scores).collect(&:スコア).flatten! ' - これはわずか2クエリです。 – MikDiet

関連する問題