【问题标题】:Will default value specified in rails migration overwrite column values in the future?Rails 迁移中指定的默认值将来会覆盖列值吗?
【发布时间】:2015-11-16 13:51:03
【问题描述】:

我有一个向用户表添加外键的迁移。

[timestamp]_add_group_id_to_users.rb

在这个迁移文件中,我为其指定了一个默认值:

def self.up
  add_column :users, :group_id, :integer, :default => 1
end

但是当我们假设用户现在拥有group_id: 4 时会发生什么 另一个功能将被推送到生产环境中?

是否会再次运行所有迁移文件? 用户的 group_ids 会被覆盖吗?

我是否应该指定类似“如果 group_id 为 nil 则覆盖它,但如果它不是并且如果它不同于 1 则不要这样做”?

【问题讨论】:

  • 只有在没有给定值时才使用默认值
  • @YuryLebedev 你能详细说明一下吗?
  • "当新行被创建并且没有为某些列指定值时,这些列将被填充它们各自的默认值。"您现有的数据不会被默认列更改,默认值只会为具有空 group_id 的新记录设置。 postgresql.org/docs/9.4/static/ddl-default.html
  • 因此,如果您需要将 group_id 显式设置为 1 为空 group_id 的现有用户,则需要通过数据迁移手动设置它

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


【解决方案1】:

迁移是累加的,意味着只会执行新的迁移。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多