使用Rails进行ID过滤和计数AR

时间:2016-09-13 10:07:05

标签: ruby-on-rails ruby ruby-on-rails-5

我在用户和团队之间有很多关系,这在我的rails模型中反映为has_many through(而不是HABTM)。

我想找到包含ID为42的用户的所有团队,而不是其他用户。在普通的SQL中这很容易,但我不确定使用Rails AR会是什么样子。

我的模型是UserTeamUsersteam

2 个答案:

答案 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