Быстрое обновление битового поля для добавленных разрешений - PullRequest
0 голосов
/ 19 июля 2011

У меня есть приложение Ruby on Rails, которое использует битовые поля для хранения пользовательских настроек.Сейчас я добавляю дополнительные биты, которые должны иметь набор по умолчанию, основанный на существующих разрешениях пользователей.Например, если у пользователя есть разрешение «A» или «B», он автоматически получает разрешение «C».Есть ли хороший способ сделать это с помощью запроса UPDATE ALL?

1 Ответ

2 голосов
/ 20 июля 2011

Прямой SQL в вашей миграции, вероятно, является лучшим выбором:

def self.up
    execute(%Q{
        UPDATE table
        SET permissions = permissions | bit_C
        WHERE permissions & bits_A_and_B <> 0
    })
end

Замените bit_C на соответствующее растровое изображение, в котором только что установлен бит для разрешения C, и bits_A_and_B на растровое изображение, которое просто имеетбиты для разрешений A и B установлены (оба). битовые операторы для PostgreSQL в значительной степени такие же (за исключением битовой XOR), как и в C. Подобные вещи будут работать, если вы используете битовые строки вместо целых чисел для ваших растровых изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...