2014-01-09 13 views
3

所以我一直在Ruby on Rails Engine guide migrations + seeds 閱讀起來,似乎纔能有他們需要在應用程序中添加引擎運行的種子用它爲什麼需要明確加載可安裝引擎的遷移和種子?

(例如,使用虛擬應用程序)

MyEngine::Engine.load_seedEngine/test/dummy/db/seeds.rb

我的問題是爲什麼我們需要做到這一點肯定他們應該從主應用程序隔離? (他們不相關,只是播種引擎數據庫)

注意:如果你是在更多的上下文之後,我已經添加了設計寶石(/引擎)到我的引擎和種子數據只是創建一個用戶下我的引擎用於登錄到其界面的上下文

回答

8

共享引擎的種子數據和模式有兩部分:模式遷移和種子數據本身。

至於發動機,有兩種方法可以在發動機內封裝數據庫遷移,但有他們的Rails應用程序中正確運行:

  • 物理遷移文件複製到Rails db/migrate目錄
  • 補丁的Rails遷移負載路徑添加發動機遷移目錄:

    config.paths [ 「分貝/遷移」] + = config.paths [ 「分貝/遷移」]擴展

...一個初始化

你可以找到遷移的發動機在這裏中了很好的討論中:https://blog.pivotal.io/labs/labs/leave-your-migrations-in-your-rails-engines

共享種子數據是少了幾分優雅。 DB種子數據從單個db/seeds.rb文件加載,所以包括通過發動機代碼定製種子數據需要鉤住從種子文件時,發動機代碼如上述代碼:

MyEngine::Engine.load_seed 

目前沒有任何黑客或更簡單的方法來做到這一點。您可能會在您的引擎安裝/設置任務中自動預置/附加該代碼到db/seeds.rb

+0

偉大的寫作正是我所尋找的將獎勵賞金,當我可以=) –