Fil*_*uzi 6 database migration sqlite ruby-on-rails
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
Run Code Online (Sandbox Code Playgroud)
如果我定义def up而不是改变它会改变什么def change?
geo*_*ock 14
该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
Run Code Online (Sandbox Code Playgroud)
change另一方面,该方法可以由Rails自动反转,因此无需手动创建down方法.
change引入替换up,down因为大多数down方法可以很容易地根据up方法预测(在上面的例子drop_table显然是相反的create_table).
在无法自动派生反向操作的情况下,您可以使用up和down方法,也可以reversible从change方法中调用方法.
有关详细信息,请参阅Rails迁移指南的第3.6 - 3.7节.