我有一个Ruby on Rails应用程序,它使用位字段来存储用户设置。我现在正在添加必须根据用户现有权限设置默认值的其他位。例如,如果用户拥有“A”或“B”权限,则会自动获得权限“C”。通过UPDATE ALL查询执行此操作是否存在任何好方法?
答案 0 :(得分:2)
迁移中的直接SQL可能是您最好的选择:
def self.up
execute(%Q{
UPDATE table
SET permissions = permissions | bit_C
WHERE permissions & bits_A_and_B <> 0
})
end
将bit_C
替换为具有权限C set的位的适当位图,将bits_A_and_B
替换为仅具有权限A和B的位(两者都设置)的位图。 bit operators for PostgreSQL几乎相同(除了按位XOR),因为它们在C中。如果您使用bitstrings而不是整数作为位图,那么类似的东西将会起作用。