我想知道如何查找只有一个特定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)
答案 0 :(得分:1)
User.includes(:roles).where(roles: {name: 'guest'}).having("COUNT(roles.id)=1")
如果您不需要急切加载查询,我还建议您使用joins
代替includes
。