Sou*_*nka 4 postgresql enums ruby-on-rails
我正在运行下面给出的迁移来为我的blood枚举添加一个额外的值。
class AddTypesToBlood < ActiveRecord::Migration[5.2]
def up
execute <<-SQL
ALTER TYPE blood ADD ATTRIBUTE 'NA';
SQL
end
def down
execute <<-SQL
ALTER TYPE blood DROP ATTRIBUTE 'NA';
SQL
end
end
Run Code Online (Sandbox Code Playgroud)
但是上面的迁移是抛出错误。Pease 查看终端屏幕截图是否有错误。
由于您要通过 SQL 添加新的枚举值,我猜您也通过 SQL 将列定义为枚举。所以 使用 Postgres 的文档:
ALTER TYPE 名称 ADD VALUE new_enum_value [ { BEFORE | 之后} existing_enum_value ]
试一试:
def up
execute <<-SQL
ALTER TYPE blood ADD VALUE 'NA';
SQL
end
def down
execute <<-SQL
ALTER TYPE blood DROP VALUE 'NA';
SQL
end
Run Code Online (Sandbox Code Playgroud)
在 Rails 中处理枚举的另一种方法是在模型中定义枚举。所以你可以做的是让你的模型有一个属性(称为blood)是 type integer。然后在模型中,您可以执行以下操作:
class Model < ApplicationRecord
enum blood: [
:A,
:B,
:AB,
:O,
:NA
]
end
Run Code Online (Sandbox Code Playgroud)
这样,当您想要修改枚举的值时,您不必创建另一个迁移。这样做的另一个好处是您可以使用字符串(或符号)作为枚举的值。IE:
# Both work
model.update_attributes(blood: 'O')
model.update_attributes(blood: :O)
Run Code Online (Sandbox Code Playgroud)
当您访问该blood属性时,您仍然会得到一个字符串:
puts model.blood # => "O"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |