Rails - 查找仅包含一个特定关联has_many或has_and_belongs_to_many记录的记录

时间:2016-11-07 19:16:29

标签: sql ruby-on-rails ruby

我想知道如何查找只有一个特定has_and_belongs_to_many项目的记录。

协会如下:

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

以下是我通常使用的内容。

User.includes(:roles).where(roles: {name: 'guest'})

这还不够,因为我想找到只有角色guest的所有用户。除了guest之外,它不应该获得具有任何其他角色的记录。

有人能告诉我这里的路吗?理想情况下,该解决方案将与所有SQL数据库类型兼容(mysql,mariadb,postgres,sqlite)

1 个答案:

答案 0 :(得分:1)

User.includes(:roles).where(roles: {name: 'guest'}).having("COUNT(roles.id)=1")

如果您不需要急切加载查询,我还建议您使用joins代替includes