2016-11-07 104 views
0

我想知道如何查找只有一個特定的has_and_belongs_to_many項目的記錄。Rails - 查找只有一個特定關聯的has_many或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
User.includes(:roles).where(roles: {name: 'guest'}).having("COUNT(roles.id)=1") 

兼容我也建議使用joins,而不是includes,如果你並不需要急於加載查詢。

相關問題