【问题标题】:How change column type works in rails migration更改列类型在 Rails 迁移中的工作原理
【发布时间】:2015-04-04 21:26:06
【问题描述】:

我们知道,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 可以很容易地找到它。但是在改变方法中它是如何被记住的?它是否在以前的迁移文件中检查此表的迁移,其中最后一个数据类型被定义为 :some_id 或其他任何东西??

【问题讨论】:

标签: ruby-on-rails migration


【解决方案1】:

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

rake db:rollback

它会抛出这个异常

ActiveRecord::IrreversibleMigration

您可以阅读更多内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2016-09-28
    • 2019-07-14
    • 2017-07-28
    • 2016-02-29
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多