2

permissionビットマスク値を含むという列を持つユーザーテーブル(データマッパーモデル)があります。

property :permission, Flag[:perm1, :perm2, :perm3]

perm1 や perm2 など、特定の権限を持つすべてのユーザーを検索したい

だから私は電話します、

User.all(:permission => [:perm1, :perm2])

これにより、クエリが作成されます

select * from user where permission = 3 それは正しくありません。正しいクエリが必要でしたが(タイプが - であるためflag

select * from user where permission &1 != 0 and permission &2 != 0

ruby datamapper の誰でも、フラグ値を検索する呼び出しを行う方法を教えてください。

4

2 に答える 2

1

どのバージョンを実行していますか? 1.2 未満ではSELECT ... FROM "users" WHERE "permission" IN (1, 2) ...User.all(:permission => [:perm1, :perm2]).

1 つのオプションは、共用体を作成することです: User.all(:permission => :perm1) | User.all(:permission => :perm2).

User.perm1s | User.perm2sまたは、クラスメソッドによって短縮される場合があります。

class User
  # ...
  def self.perm1s; all :permission => :perm1 end
  def self.perm2s; all :permission => :perm2 end
end

あなたが示したように、どちらのクエリでもまったく同じクエリではありませんが、結果は同じになるはずです。

于 2013-04-10T13:39:42.740 に答える