Поиск по битовой маске в ActiveRecord - PullRequest
6 голосов
/ 02 августа 2010

У меня есть таблица пользователей с полем битовой маски, в котором есть маска разрешений.Локально я могу определить, есть ли у пользователя определенные разрешения, выполнив битовую маску (UserPermissions&Perm)==Perm.Тем не менее, я хочу иметь возможность выдавать find_by_mask или что-то подобное, возможно, используя :conditions, но я не могу выяснить, как я могу запросить базу данных, чтобы получить список пользователей с соответствующей маской разрешений.

Есть ли идеи по использованию ActiveRecord?

В частности, это должно работать с использованием sqlite и postgres

1 Ответ

13 голосов
/ 02 августа 2010

На мой взгляд, разумно было бы разбить ваше поле битовой маски на серию логических полей. Хранение битовых масок в реляционной базе данных не так уж и далеко от хранения списков с разделителями в поле - это пограничная денормализация.

Тем не менее, вы можете использовать побитовое И в ваших SQL-запросах с оператором &, поэтому вы можете сказать:

User.where('permissions & ? > 0', Perm)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...