Rails不會強制您使用遷移。如果你沒有定義遷移,但以其他方式定義你的數據庫,那麼所有東西都可以正常工作。
如果您定義了遷移,那麼Rails會跟蹤它們是否已經運行(在第一次運行遷移時,Rails會爲此創建一個新的數據庫表,schema_migrations
),並且抱怨如果你還沒有運行它們。如果你不打算使用遷移,那麼在db/migrations中沒有任何東西。
您仍然可以從現有數據庫生成schema.rb
,只需運行bundle exec rake db:schema:dump
即可。但是,運行的Rails應用程序不使用schema.rb文件,如果您還沒有schema.rb
,Rails也可以正常工作。 AR模型通過從應用程序啓動時的數據庫實時獲取數據庫表的信息,但他們沒有從schema.rb中獲取它。但是schema.rb對於在新數據庫中重新創建模式很有用(即使不使用遷移,但是可以轉儲schema.rb,仍然可以使用它來重新創建相同的模式)。
遷移非常有用,大多數Rails都喜歡它們。它們可以讓您跟蹤git中控制的源代碼中db數據庫模式的變化,並且可以及時回滾或前進到其他數據庫模式點。您還可以使用遷移來實際修改數據,而不僅僅是模式,並且仍然準確記錄您在遷移中執行的修改/遷移數據的操作。如果不止一個開發人員在代碼上進行協作,遷移尤其(但不僅僅是)有用,因爲您可以更輕鬆地合併模式更改,因爲它們在源代碼中作爲遷移進行跟蹤。
遷移生成的模式更改也爲您處理一些rails約定,例如默認創建名爲id
的主鍵,並且如果您要求創建標準Rails updated_at或created_at列,
但是,如果你不想使用遷移,你不必,Rails將會非常高興。
當你運行'rake db:migrate'時,你的數據庫模式被更新。如果不運行遷移,屬性將不會添加到您的模式中,因此在實際數據庫中將不可用。您可以在應用程序目錄中的'db/schema.rb'中查看架構。 – sugaryourcoffee