如何在rails迁移中更改列类型

时间:2015-02-05 05:42:01

标签: ruby-on-rails migration

我们知道,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或其他任何内容?

1 个答案:

答案 0 :(得分:4)

change_column是一种不可逆转的迁移方法。因此,您无法使用更改方法撤消此迁移。为此,您需要编写上下方法。如果你只是在改变方法中写这个,当你运行

rake db:rollback

它将抛出此异常

ActiveRecord::IrreversibleMigration

您可以阅读更多内容:

http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns