And*_*imm 18 ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord
在Rails的指南,活动记录迁移说,你可以做
change_column_default :products, :approved, from: true, to: false
Run Code Online (Sandbox Code Playgroud)
我change在Rails中有一个方法,类似于以下内容:
change_column_default :people, :height, from: nil, to: 0
Run Code Online (Sandbox Code Playgroud)
意图从没有任何默认值,到默认值为零.
但是,当我尝试回滚时,我得到了
ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
Run Code Online (Sandbox Code Playgroud)
考虑到我给Rails中from和to,为什么没有接受它?
我正在使用Rails 4.2.0.
Ath*_*har 17
如果您使用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
Run Code Online (Sandbox Code Playgroud)
所以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
Run Code Online (Sandbox Code Playgroud)
And*_*imm 13
from和在Rails 5+ to中添加链接到问题的指南是针对Edge Rails的,而不是针对Rails的发布版本.
可逆语法change_column_default是拉请求20018的结果.pull请求还更新了Edge Rails的Rails指南.
来自activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:
- def change_column_default(table_name, column_name, default)
+ # Passing a hash containing +:from+ and +:to+ will make this change
+ # reversible in migration:
+ #
+ # change_column_default(:posts, :state, from: nil, to: "draft")
+ #
+ def change_column_default(table_name, column_name, default_or_changes)
Run Code Online (Sandbox Code Playgroud)
请求是在2015年6月27日提出的,这比2015年8月1日发布的任何版本的Rails更新.
Rails 4.2.3的迁移文档反映了可逆语法尚不可用的事实:
change_column_default :products, :approved, false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9660 次 |
| 最近记录: |