gpt4 book ai didi

ruby-on-rails - 在 postgres rails 中为 Enum 类型添加额外的值

转载 作者:行者123 更新时间:2023-11-29 12:40:41 29 4
gpt4 key购买 nike

我正在运行下面给出的迁移,为我的 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

但是上面的迁移是抛出错误。请查看终端屏幕截图是否有错误。

enter image description here

最佳答案

由于您要通过 SQL 添加新的枚举值,我猜测您也通过 SQL 将列定义为枚举。所以 using Postgres's Documentation:

ALTER TYPE name ADD VALUE new_enum_value [ { BEFORE | AFTER } 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

在 Rails 中处理枚举的另一种方法是在模型中定义枚举。所以你可以做的是让你的模型有一个类型为 integer 的属性(称为 blood)。然后在模型中你可以这样做:

class Model < ApplicationRecord
enum blood: [
:A,
:B,
:AB,
:O,
:NA
]
end

这样当您想要修改枚举的值时,您不必创建另一个迁移。这样做的另一个好处是您可以使用字符串(或符号)作为枚举的值。即:

# Both work
model.update_attributes(blood: 'O')
model.update_attributes(blood: :O)

当你访问 blood 属性时,你仍然会得到一个字符串:

puts model.blood # => "O"

关于ruby-on-rails - 在 postgres rails 中为 Enum 类型添加额外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51851637/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com