2016-04-30 5 views
0

私はこれらの関係で4つのモデルがあります:私は、私が探しているものを、これを回避するために苦労していRailsで関連付けをマージするには?

class Summoner 
has_many :masteries 
has_many :stats 
end 

class Mastery 
belongs_to :summoner 
belongs_to :champion 
end 

class Stat 
belongs_to :summoner 
belongs_to :champion 
end 

class Champion 
has_many :masteries 
has_many :stats 
end 

は、与えられた召喚のための習得とのstatオブジェクトとすべてのチャンピオンを取得することです。このため、単一のクエリがあるかどうか、私は知りませんが、以下の(未テスト)働くかもしれない1

Champion1: { mastery: { summoner_id: 1, ... }, stat: { summoner_id: 1, ...} }, 
Champion2: { mastery: { summoner_id: 1, ... }, stat: { summoner_id: 1, ...} }, 
Champion3: { mastery: { summoner_id: 1, ... }, stat: { summoner_id: 1, ...} } 

答えて

1

:summoner_idについては

:結果はこのようなものになるだろう。

summoner = Summoner.find(1) 
summoner_mastery_ids = summoner.masteries.pluck(:id) 
summoner_stat_ids = summoner.stats.pluck(:id) 

champions = Champion.includes(:masteries, :stats).where(masteries: {id: summoner_master_ids}, stats: {id: summoner_stat_ids}) 
+0

これで悪夢を抱えてしまったから、あなたは私を救った!ありがとう! –