2014-09-23 116 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 
相关问题