Ruby on rails 将枚举值添加到RubyonRails模型,并使其成为所有新模型实例的默认值

Ruby on rails 将枚举值添加到RubyonRails模型,并使其成为所有新模型实例的默认值,ruby-on-rails,ruby,enums,model,Ruby On Rails,Ruby,Enums,Model,我在模型中定义了这样的枚举 enum status: { started: "started", passed: "passed", failed: "failed" } 我想给它添加值draft:“draft” 但据我所知,我必须以某种方式运行迁移,才能将其添加到数据库中。我该怎么做? 可能是个愚蠢的问题,请容忍我,谢谢 :编辑 谢谢你的反馈 我还需要使新添加的枚举值成为所有新模型的默认值。这可能需要迁移,但如何生成它?您可以将枚举

我在模型中定义了这样的枚举

enum status: { started: "started", passed: "passed", failed: "failed" }
我想给它添加值
draft:“draft”

但据我所知,我必须以某种方式运行迁移,才能将其添加到数据库中。我该怎么做? 可能是个愚蠢的问题,请容忍我,谢谢

:编辑 谢谢你的反馈


我还需要使新添加的枚举值成为所有新模型的默认值。这可能需要迁移,但如何生成它?

您可以将枚举值添加到列表中

enum status: { started: "started", passed: "passed", failed: "failed", draft: "draft" }
如果枚举是数组,则必须确保只将新值添加到数组的末尾,否则记录的状态将错误

至于将其作为新记录的默认设置,我将在模型中执行此操作,而不是在数据库中执行此操作

class MyModel < ApplicationRecord
  before_save :initialize_status

  private

  def initialize_status
    self.status ||= 'draft' if new_record?
  end
end
class MyModel
您可以将枚举值添加到列表中

enum status: { started: "started", passed: "passed", failed: "failed", draft: "draft" }
如果枚举是数组,则必须确保只将新值添加到数组的末尾,否则记录的状态将错误

至于将其作为新记录的默认设置,我将在模型中执行此操作,而不是在数据库中执行此操作

class MyModel < ApplicationRecord
  before_save :initialize_status

  private

  def initialize_status
    self.status ||= 'draft' if new_record?
  end
end
class MyModel
这种迁移会做什么?我想你可以给这个枚举添加一个新值并开始使用它。如果是这样的话,我会对这个问题再补充一点,谢谢你的输入迁移会做什么?我想你可以给这个枚举添加一个新值并开始使用它。如果是这样的话,我会对这个问题再补充一点,谢谢你的输入。数组声明是这样的:
enum status:[:active,:archived]
。这里有一个隐式映射(符号到整数(数组索引))。但在这里,映射是显式的。你确定把新的KV对放在列表前面会使记录的状态错误吗?@SergioTulentsev是的,你说得对,哈希对这个问题免疫,我的错。答案已更正。这是更好的另一个优点@SergioTulentsev,修改了答案。数组声明也是如此:
enum status:[:active,:archived]
。这里有一个隐式映射(符号到整数(数组索引))。但在这里,映射是显式的。你确定把新的KV对放在列表前面会使记录的状态错误吗?@SergioTulentsev是的,你说得对,哈希对这个问题免疫,我的错。答案正确。这是更好的另一个好点@SergioTulentsev,修改答案。