2016-04-28 10 views
0

私のプロジェクトにはいくつかの検索フィルタがあります。ロールでユーザーを検索できます。 :adminを検索すると、役割があるユーザ:[:admin]が返されます。しかし、役割:[:admin, :mentor]で検索結果にユーザーを追加しないでください。ロールモデルジェム:役割を持つすべてのユーザーを取得する方法:[:admin、:mentor]

役割の管理者を持つすべてのユーザーを見つけるSQLクエリの作成方法を知っている人は、これらのユーザーがまだ管理者である[:admin、:mentor]という役割を持つユーザーを含める必要があります。

20: custom_filter :role, lambda { |records, value| 
=> 21:  binding.pry 
    22:  records.where(roles_mask: User.mask_for(value)) 
    23: } 
    24: 
    25: class << self 
    26:  def secure_find!(token:) 

[email protected] (User)> records 
=> User(id: integer, email: string, encrypted_password: string, reset_password_token: string, roles_mask: integer) 
[email protected] (User)> value 
=> "admin" 

ありがとうございます!

答えて

1

はおそらくvaluesで唯一の役割を渡している。

records.where(roles_mask: User.mask_for([:admin, :mentor])) 
+0

うん、そんなことはできない。役割[:admin]を持つユーザーを確認する必要があります。あなたが持っているものは、 ':admin'と':mentor'の両方の役割を持つユーザーを返します – joeyk16

0

私はこの

custom_filter :role, lambda { |records, value| 
    records.where("roles_mask & ? != 0", User.mask_for(value)) 
    } 

これを行う方法を見つけました:

records.where(roles_mask: User.mask_for(value)) 

valueが両方含まれていることを確認してください役割があるUsersのすべてを返しますadmin。ユーザが2つのロール、または[:admin, :mentor]のような3つのロールを持っていても、結果に彼のユーザは入りません。

関連する問題