2016-11-07 16 views
0

特定のhas_and_belongs_to_manyアイテムのレコードを検索する方法を知りたいと思います。次のようにRails - 関連するhas_manyレコードまたはhas_and_belongs_to_manyレコードが1つだけあるレコードを検索する

団体は以下のとおりです。

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'}) 

ロールだけを持つすべてのユーザーを検索したいので、これでは不十分ですguestguestに加えて、他の役割を持つレコードを取得すべきではありません。

誰かが私にここに道を示すことができますか?理想的には解決策は、私はまた、あなたが熱心な負荷にクエリを必要としない場合joinsの代わりincludesを使用することをお勧めしますすべてのSQLデータベースの種類(mysqlの、mariadb、postgresの、sqliteの)

答えて

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

と互換性があるでしょう。

関連する問題