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_table和add_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)