6

def up; end和有什么区别def change; end?我有代码

class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets do |t|
      t.string :status
      t.integer :zombie_id

      t.timestamps
    end
  end
end

如果我定义def up而不是它会改变什么def change

4

1 回答 1

15

up方法应附带down可用于撤消迁移更改的方法。例如,如果您在问题中使用 up 和 down 编写示例,则需要以下代码:

class CreateTweets < ActiveRecord::Migration
  def up
    create_table :tweets do |t|
      t.string :status
      t.integer :zombie_id

      t.timestamps
    end
  end

  def down
    drop_table :tweets
  end
end

change另一方面,Rails 可以自动反转该方法,因此无需手动创建down方法。

change被引入替换up并且down因为大多数down方法可以很容易地基于该up方法进行预测(在上面的示例drop_table中显然是相反的create_table)。

在无法自动导出逆向运算的情况下,可以使用upand方法,也可以从down方法中调用方法。reversiblechange

有关详细信息,请参阅Rails 迁移指南的第 3.6 - 3.7 节

于 2013-07-06T23:30:23.793 回答