Rails guides to active record migrations表示您可以
change_column_default :products, :approved, from: true, to: false
我在Rails中有一个
change
方法,它类似于以下内容:change_column_default :people, :height, from: nil, to: 0
目的是从没有任何默认值转变为默认值为零。
但是,当我尝试将其回滚时,
ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
考虑到我给Rails一个
from
和to
,为什么它不接受呢?我正在使用Rails 4.2.0。
最佳答案
如果您使用mysql作为适配器,则根据此链接http://apidock.com/rails/ActiveRecord/ConnectionAdapters/AbstractMysqlAdapter/change_column_default,您的change_column_default
迁移将像这样运行
def change_column_default(table_name, column_name, default) #:nodoc:
column = column_for(table_name, column_name)
change_column table_name, column_name, column.sql_type, :default => default
end
如您所见,当您调用
change_column
并根据此链接时,它会在自身内部调用change_column_default
http://edgeguides.rubyonrails.org/active_record_migrations.html
change_column
迁移是不可逆的。这说明了为什么得到
ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
因此,如果要使用
change_column_default
运行迁移,则必须添加def up
和def down
。我建议使用change_column,因为已经在change_column_default中调用了它。
def up
change_column :people, :height, :integer, default: 0
end
def down
change_column :people, :height, :integer, default: nil
end
关于ruby-on-rails - 在Rails中没有默认值的情况下,change_column_default的可逆迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552604/