我们知道,rails ActiveRecord :: Migration现在有了一个新方法
def change
add_column :accounts, :name, :string
add_index :accounts, :name
change_column :my_table, :some_id, :string
end
但我的问题是
change_column :my_table, :some_id, :string
rails不需要知道:some_id的先前类型是整数还是不是。 例如假设:some_id是一个整数,在此迁移之后它将转换为字符串。
当我恢复此迁移时:some_id类型应该再次为整数。我对吗 ??但是rails如何理解:some_id以前的类型是整数。
在之前的mehtod self.up和self.down中,它是在迁移文件中编写的。所以这不是问题。 rails很容易找到。但在改变方法中它是如何被重新收集的?它是否在先前的迁移文件中检查此表的迁移,其中最后一种数据类型被定义为:some_id或其他任何内容?
答案 0 :(得分:4)
change_column是一种不可逆转的迁移方法。因此,您无法使用更改方法撤消此迁移。为此,您需要编写上下方法。如果你只是在改变方法中写这个,当你运行
rake db:rollback
它将抛出此异常
ActiveRecord::IrreversibleMigration
您可以阅读更多内容:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns