按 ID 过滤并使用 Rails AR 计数

Filtering by ID and count with Rails AR

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

我想查找包含 ID 为 42 且没有其他用户的用户的所有团队。这在普通 SQL 中会很容易,但我不确定使用 Rails AR.

会是什么样子

我的模型是 UserTeamUsersteam

这可能会解决您的问题。它混合了一些 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

除非您想编写复杂的原始 SQL,否则最好将其拆分为两个查询:

# assuming Team.table_name == 'teams'
user = User.find(42)
required_teams = user.teams.joins(:users).group('teams.id').having('COUNT(*) = 1')