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
,会有什么变化?
答案 0 :(得分:13)
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
方法轻松预测(在上面的示例中为{ {1}}显然与drop_table
)相反。
如果无法自动导出反向操作,您可以使用create_table
和up
方法,也可以调用down
中的reversible
方法方法