我想知道當回滾遷移文件時,如果Rails有execute
和一些原始SQL語句,它會執行什麼操作。回滾Rails遷移並執行
這裏是一個人爲的例子:
def change
add_column :my_table, :new_column
execute "update my_table set new_column = some_value where some_condition"
end
當回滾此遷移,並滑軌默默地忽略遷移的execute
部分?
我想知道當回滾遷移文件時,如果Rails有execute
和一些原始SQL語句,它會執行什麼操作。回滾Rails遷移並執行
這裏是一個人爲的例子:
def change
add_column :my_table, :new_column
execute "update my_table set new_column = some_value where some_condition"
end
當回滾此遷移,並滑軌默默地忽略遷移的execute
部分?
如果您在command_recorder.rb看(在活動記錄寶石),那麼你會看到一些遷移方法(如add_column
)都有相應invert_foo
方法這扭轉了變化。如果沒有相應的invert
方法,則導軌將引發錯誤。這是因爲它無法知道如何反轉任意語句。
如果你希望你的遷移是可逆的,那麼你需要告訴rails如何反轉它。造成這種情況的一般形式是
reversible do |direction|
direction.up { ... }
direction.down {...}
end
向上和向下的方法可以根據需要被稱爲很多次,如果方向一致的遷移是否正在運行或正在回滾只會屈服於塊。
在你的情況下,這只是
reversible do |direction|
direction.up { execute "..." }
end
既然你不需要撤消更改列列是否將被丟棄。
不知道這一個。謝謝。嘗試可能會更快,但其他人可能會在網上尋找相同的答案。 –
我會承擔很多。您應該將其分解爲上移和下移。
下應該是這個樣子:
def down
raise ActiveRecord::IrreversibleMigration
end
你想知道會發生什麼或如何回滾這種變化? – dx7
@ dx7正如問題中所寫,我想知道如果我試圖回滾此更改,Rails將執行什麼操作。 –
嘗試:-)會不會更快? –