rails 迁移中更改列类型的工作原理

How change column type works in 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 之前的类型是整数。

在之前的方法self.up和self.down中是写在迁移文件中的。所以这不是问题。 rails 很容易找到。但在改变方法中它是如何被回忆起来的?它是否在以前的迁移文件中检查此 table 的迁移,其中最后一个数据类型是为 :some_id 或其他任何东西定义的??

change_column是一种不可逆的迁移方式。所以你不能使用 change 方法来逆转这个迁移。为此,您需要编写 up 和 down 方法。如果你只是在 change 方法中写这个,当你 运行

rake db:rollback

它会抛出这个异常

ActiveRecord::IrreversibleMigration

您可以阅读更多内容:

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