Прямой 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. Подобные вещи будут работать, если вы используете битовые строки вместо целых чисел для ваших растровых изображений.