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
,会发生什么变化? 最佳答案
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
来代替up
和down
,是因为大多数down
方法可以轻松地基于up
方法进行预测(在上述示例中,drop_table
显然是create_table
的反面)。在无法自动进行反向操作的情况下,可以使用
up
和down
方法,也可以从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/