在ActiveRecord中通过位掩码搜索

Mit*_*sey 6 activerecord ruby-on-rails bitmask

我有一个带有位掩码字段的用户表,其中包含一个权限掩码.在本地,我可以通过执行位掩码来确定用户是否具有某种权限(UserPermissions&Perm)==Perm.但是,我希望能够发布一个find_by_mask或类似的东西,也许使用一个:conditions,但我似乎无法找到如何查询数据库以检索具有匹配权限掩码的用户列表.

使用ActiveRecord的任何想法?

具体来说,这必须使用sqlite和postgres

Sea*_*ell 13

在我看来,理智的做法是将你的bitmask字段分成一系列布尔字段.在关系数据库中存储位掩码与在字段中存储分隔列表相差不远 - 它是边界非规范化.

也就是说,您可以在SQL查询中使用&运算符,这样您就可以说:

User.where('permissions & ? > 0', Perm)
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的按位信息.我考虑过使用布尔值,但我有15个权限,可能会在以后添加更多权限.使用位掩码比在表中使用15+布尔要清晰得多. (6认同)