2014-09-23 135 views
3

我正在開發一個電子商務應用程序,並且正在其管理網站上工作。這兩個應用程序具有相同的業務領域,並且我需要在管理應用程序中使用電子商務應用程序中的一些模型。在兩個Rails之間共享通用模型應用

我發現了一些在線共享模型的解決方案,但我不清楚哪一個更好,我應該如何實現它。

解決方案,我發現:

  1. Create a rake task to copy the models from the e-commerce app to the admin app

  2. Create a third ruby module and put the models in there and pull the models from the app directory into this newly created lib and require it inside the app

  3. 自動加載從電子商務應用的模型來管理紅寶石搜索

    config.autoload_paths += %W(#{config.root}/../e-commerce-app/app/models/) 
    

我認爲第二種解決方案是正確的方法,但我不確定如何實現它。

回答

8

這些都不是。

如何創建一個共享的寶石,並把它放在你的私人git回購。使用Rails,你可以在Gemfile中

通過包裝寶石作爲rails_engine自動加載模型作爲應用程序本身

example

在年底提供相同的機制需要它

gem 'my_gem_name', git: 'http:my_git_repo.com/my_gem_name' 

更先進的解決方案將爲電子商務應用程序中的所需數據創建REST服務,並在管理應用程序中使用它。特別是對於用戶(和身份驗證),它甚至可以將其解壓縮到單獨的應用程序並提供UserAuthentication服務。

+0

這實際上是一個難題。通常情況下,管理界面不需要「完整」模型(所有的驗證,電子郵件鉤子和什麼)。將模型捆綁在共享gem中可能會爲管理應用創建依賴關係,如果僅使用簡化副本,則不需要這些依賴關係。 – 2014-09-23 13:00:52

+0

您不必將所有模型打包到寶石中。只有普通的。而且你也觸及一個有趣的觀點。您必須在不同應用上訪問相同數據的事實並不一定意味着它應該由完全相同的模型完成。有時,只有另一種業務邏輯才能進行相同的數據訪問,並且最好將行爲提取到不同的類中以避免炸燬模型 – 2014-09-23 13:09:59

+0

現在,電子商務網站具有用於設計身份驗證的用戶模型。我向管理員提供用戶統計信息,因此我需要訪問管理應用程序中的該用戶模型。那麼,我可以在用戶模型中使用gem,並且對於電子商務應用程序也可以使用設計認證? – Saurabh 2014-09-23 14:24:22

2

要做到這一點,最簡單的方法是使用命令行創建「可安裝」寶石:

rails plugin new e_commerce_app_core --mountable 

這將設置你的Rails引擎,所有你需要做的就是將你的模型(S)從你的應用程序到e_commerce_app_core/app/models/

我有這樣的寶石:

gem 'e_commerce_app_core_core', git: 'https://github.com/my_repo/e_commerce_app_core_core.git' 

然後我運行:

bundle config local.e_commerce_app_core_core ../e_commerce_app_core_core 

此命令連接本地目錄到您的構建,而不是使用外部回購。這樣我就可以在本地使用gem,並在準備就緒時將其推送到github。

我也動了我的用戶控制器,它包含登錄邏輯,但讓我的用戶路徑工作,我改變了我的config/routes.rb來自:

ECommerceAppCore::Engine.routes.draw do 
    ... 
end 

到:

Rails.application.routes.draw do 
    ... 
end 

我移動遷移到我的寶石加入到我的application.rb

config.paths['db/migrate'] = ECommerceAppCore::Engine.paths['db/migrate'].existent 
相關問題