【问题标题】:Enum default value to skip existing records rails枚举默认值以跳过现有记录栏
【发布时间】:2021-07-21 14:57:22
【问题描述】:

我在 DB 上有大量记录,想添加一个新列。但是,我不想为旧的现有记录设置默认值,只为新记录设置。

当我在迁移时设置默认值(如下所示),所有旧的现有都将接收默认值。

add_column :records, :status, :integer, default: 0

问题是,如果我只为枚举添加默认值,就像这样:

enum status: {
    to_review: 0,
    pending: 1,
    processed: 2
  }, _default: :to_review

我收到此错误

NoMethodError (undefined method `all?' for :to_review:Symbol)

如何添加新列、设置默认值并仍将旧记录保留为 null?

【问题讨论】:

    标签: ruby-on-rails enums


    【解决方案1】:

    查看这里的文档,您似乎走在了正确的轨道上

    https://api.rubyonrails.org/v6.1.4/classes/ActiveRecord/Enum.html

    enum status: { to_review: 0, pending: 1, processed: 2}, _default: :to_review
    

    注意: rails 6.1 中添加了对 _default 的支持 - pull request

    请检查您是否使用支持的版本

    【讨论】:

    • 你是对的!我会仔细检查你的链接。不幸的是,我们使用的是 6.01。另一种选择是使用 before_save,但这将是一个额外的回调。
    • 嗯,迁移的时候可以在数据库级别设置默认值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2019-06-21
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2015-08-22
    相关资源
    最近更新 更多