2010-08-02 74 views
5

我有一個用戶表,其中有一個位掩碼字段,其中有一個權限掩碼。在本地,我可以通過執行位掩碼(UserPermissions&Perm)==Perm來確定用戶是否具有某種權限。然而,我想能夠發出一個find_by_mask或類似的東西,也許使用:conditions,但我似乎無法瞭解如何查詢數據庫以檢索具有匹配權限掩碼的用戶列表。在ActiveRecord中通過位掩碼搜索

使用ActiveRecord的任何想法?

具體這個工作必須使用SQLite和Postgres

回答

12

理智的事情,在我看來,將是你的位操作的字段闖入了一系列布爾字段。在關係型數據庫中存儲位掩碼與在字段中存儲分隔列表相距甚遠 - 這是臨界非規範化。

這就是說,你可以使用一個位與同&操作SQL查詢,這樣你就可以說:

User.where('permissions & ? > 0', Perm) 
+5

感謝您的按位信息。我想過使用布爾值,但我有15個權限,並且可能稍後添加更多。使用位掩碼比表中有15個布爾值更清晰。 – 2010-08-02 04:18:44