def up; enddef 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,会发生什么变化?

最佳答案

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

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

之所以引入change来代替updown,是因为大多数down方法可以轻松地基于up方法进行预测(在上述示例中,drop_table显然是create_table的反面)。

在无法自动进行反向操作的情况下,可以使用updown方法,也可以从reversible方法调用 change 方法。

有关更多信息,请参见sections 3.6 - 3.7 of the Rails migration guide

关于ruby-on-rails - 迁移文件中def up和def change之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17507811/

10-10 00:44
查看更多