從頭開始簽出新項目時,不應使用遷移來構建數據庫。 您應該使用rake db:schema:load
代替。
讓我告訴你爲什麼。
讓我們假設你在遷移10 創建一個新的Post
模型後表在遷移11,你執行的Post
模型的一些特殊的闡述。 過了一段時間,您決定放棄Post
模型和帖子表,因爲不再需要。
六個月後,您從頭開始簽出項目。如果您嘗試運行rake db:migrate
,遷移11將失敗,抱怨丟失的模型。確實,這個模型已經在很多個月前被刪除了,而且已經不再可用了。
相反,如果您運行rake db:schema:load
,則將使用正確的模式版本初始化數據庫。
談到遷移,如果您剛剛創建了郵政編碼方法,並且您正嘗試使用_changed?在同一個遷移中的魔法方法,您需要在之前重新加載模式。
class MigrationFile < ...
self.up
add_column :user, :postcode, :string
User.all.each { |user| puts user.postcode_changed? } # will fail
User.reset_column_information
User.all.each { |user| puts user.postcode_changed? } # now it works
end
...
end
我應該指出,這段代碼是在模型中,而不是控制器,但我明白了你的觀點。 – 2009-12-22 09:46:18
我從來沒有談論過控制器。 – 2009-12-22 14:46:12