2016-04-30 60 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 

我有一個艱難的時間來解決這個問題,我在尋找什麼是讓每一個冠軍,一個掌握和統計對象爲給定的召喚。其結果將是這樣的:

對於summoner_id: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 = 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

你救了我從這個惡夢,謝謝! –