我在用户和团队之间有很多关系,这在我的rails模型中反映为has_many through
(而不是HABTM)。
我想找到包含ID为42
的用户的所有团队,而不是其他用户。在普通的SQL中这很容易,但我不确定使用Rails AR会是什么样子。
我的模型是User
,Team
和Usersteam
。
答案 0 :(得分:1)
除非您想编写复杂的原始SQL,否则最好将其拆分为两个查询:
# assuming Team.table_name == 'teams'
user = User.find(42)
required_teams = user.teams.joins(:users).group('teams.id').having('COUNT(*) = 1')
答案 1 :(得分:-1)
这可能会解决您的问题。它混合了一些SQL片段,但我不知道这在纯ActiveRecord中是否可行。可能如果你混入Arel,但这可能会变得更加混乱。
Team.
joins(:usersteams, :users).
where(usersteams: { user_id: 42}).
having("count(usersteams.user_id) = 1").
group("teams.id, usersteams.user_id").
all