#team.rb
has_many :players_teams
has_many :players, :through => :players_teams
#player.rb
has_many :players_teams
has_many :teams, :through => :players_teams
鉴于我有两位明星球员名为" Lisa"和" Bo",我将如何搜索团队模型以找到所有同时拥有Lisa和Bo的团队,而无需循环。所有has_many到查询示例都假设我只通过一个关联属性查找团队。但我想通过数组搜索。 [" Lisa"," Bo"]。
答案 0 :(得分:0)
这有点难看,但应该有效地完成工作:
Team.where(:id => Player.where(:name => ["Lisa","Bob"]).
group(:team_id).
having("count(*) = 2").
pluck(:team_id))
答案 1 :(得分:0)
如果我理解正确,你在玩家,球队和球员表之间有很多很多关系。不幸的是,我找不到这个问题的纯SQL解决方案,但是这个问题应该足够轻,不要给代码带来任何问题,即使我不知道它是否会扩展到巨大的数据库:
Team.where(id: (PlayersTeams.where(player_id: Player.find_by_name("Lisa")).pluck(:team_id) & PlayersTeams.where(player_id: Player.find_by_name("Bob")).pluck(:team_id)))
基本上,你为每个玩家获得团队,并找到他们与ruby数组的交叉点。我仍然希望看到使用纯SQL可以做同样的事情。