我可以在Rails 4和Rail 5中回滚change_column吗?

Mat*_*lva 7 ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord ruby-on-rails-5

可以使用rails 4或rails 5中的change_columns回滚迁移:

def change
  change_column etc
end
Run Code Online (Sandbox Code Playgroud)

我应该使用上下方法吗?

Mar*_*n M 14

change_column默认情况下无法恢复.Rails无法知道迁移的列定义,因此无法回滚到此原始定义.

因此,从Rails 4开始,您可以为Rails提供必要的信息.这就是可逆方法的用途:

def change
  reversible do |dir|
    dir.up do
      change_column :users, :score, :decimal, precision: 6, scale: 2
    end
    dir.down do
      change_column :users, :score, :decimal, precision: 4, scale: 2
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

乍一看,这似乎比使用up和更复杂down.优点是,您可以将其与可逆迁移混合使用.
如果你将一堆字段添加到表中并且必须更改视图字段,则可以使用change_tableadd_column一起进行reversible干净且紧凑的迁移:

def change
  change_table :users do |t|
    t.string :address
    t.date :birthday
    # ...
  end

  reversible do |dir|
    dir.up do
      change_column :users, :score, :decimal, precision: 6, scale: 2
    end
    dir.down do
      change_column :users, :score, :decimal, precision: 4, scale: 2
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 从字面上看,原始问题的答案_我应该使用down方法吗?_是* YES * ... ...还有更多选择。 (2认同)