【问题标题】:ActiveRecord change column default value (not working)ActiveRecord 更改列默认值(不起作用)
【发布时间】:2016-01-14 17:25:10
【问题描述】:

我的数据库中有一个companies 表,其中包含两列(sizestate),我希望向其中添加默认值。目前没有默认值,列未设置为null: false。我尝试使用docs 中概述的update_columnupdate_column_default 方法,但似乎都没有做任何事情。我能够运行迁移,但表没有任何更改。

我试过 update_column 像这样:

class AddDefaultValuesToCompanies < ActiveRecord::Migration
    def change
        def up
            change_column :companies, :state, :string, default: 'MA'
            change_column :companies, :size, :string, default: '1-10'
        end

        def down
            change_column :companies, :state, :string, default: nil
            change_column :companies, :size, :string, default: nil
        end
    end
end

我也尝试过像这样使用update_column_default

class AddDefaultValuesToCompanies < ActiveRecord::Migration
    def change
        def up
            change_column_default(:companies, :state, 'MA')
            change_column_default(:companies, :size, '1-10')
        end

        def down
            change_column_default(:companies, :state, nil)
            change_column_default(:companies, :size, nil)
        end
    end
end

我在这里错过了什么?

【问题讨论】:

  • 您的迁移将更改列默认值,但不会更新现有数据...
  • 我认为在 change 块周围包裹 downup 块在语法上是不合适的。我不知道这是否至少是您的问题的部分原因。运行 rake db:migrate 时输出什么?
  • 哇,真不敢相信我错过了。这是我运行rails g migration 时的更改块。完全忘记删除它。

标签: ruby-on-rails activerecord rails-migrations


【解决方案1】:

您的迁移只会更改新创建记录的默认值。我会编写一个 rake 任务来更新数据库中的现有值。使用类似

Companies.where(state: "").map{|c| c.update_attribute(state: "ma")

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2018-11-12
    相关资源
    最近更新 更多