2012-01-01 72 views
2

目前我正在使用RoR應用程序(2.3.14和ActiveRecord)(我們稱之爲A)。如何外化Rails模型(api/gem/plugin)

現在我開始另一個項目B(一個使用水豚的遠程測試應用程序,看起來像這樣:https://github.com/searls/remote-capybara-cucumber-example)。

但是現在我需要訪問應用程序B的模型以進行測試數據設置(以及可能的測試斷言)。因此,我想使用現有的模型類(如果需要,還可以使用一些其他庫,例如factory_girl)。

我當然不想將我的項目B包裝在Rails應用程序中並複製模型類。那麼是否有辦法組織A以便B可以訪問模型並創建/更新/銷燬實體?

是否有任何的關鍵字進一步研究(我試過含軌道模型作爲寶石几個谷歌搜索,作爲一個插件,外部化軌道模型等...但止跌回升沒什麼用處(ActiveRecord的大多文檔)

回答

1

Rails 2.x確實很難在兩個應用程序之間共享模型層

如果您不關心維護兩次遷移,可以將模型放入一個gem中,然後在您的應用程序中需要它。

另一種方法是將符號鏈接dbapp/models從兩個應用程序到共享文件夾的目錄。儘管你必須小心謹慎,但這很有效,因爲rake任務和生成器現在都會影響這兩個應用程序。

Rails 3.1附帶改進的rails引擎實現。引擎允許您隔離軌道應用程序的一部分,並將它們打包爲寶石。

+0

究竟你「維護移民」的意思可能不是遷移只是停留是他們(在Rails應用程序),或者他們必須要在創業板以及? – leifg 2012-01-02 08:55:19

+0

您將擁有兩個rails應用程序,因此您需要能夠在兩個應用程序中運行遷移。最簡單的方法是將它們複製到兩個應用程序。新的rails 3.1引擎具有更復雜的機制:每個引擎都有一個rake任務,可以將引擎中的遷移複製到主機應用程序。這樣,您可以編寫一次遷移,並可以在任何地方使用它們。希望這可以幫助。 – balu 2012-01-02 21:46:34

+0

其實,第二個應用程序不會是Rails應用程序。那是問題嗎? – leifg 2012-01-03 09:02:55

-1

您可以嘗試在B項目中使用A的app/models目錄的別名(符號鏈接)。

在Mac/Linux的:

ln -s /volumes/code/project-a/app/models/ /volumes/code/project-b/models 
+0

沒有閱讀@ balu的答案,但它在那裏也提到了要注意的事情。 – Jurgen 2012-01-19 02:30:07