我一直在阅读很多关于这个主题的内容,似乎没有什么能够完全满足我的需求。我很抱歉,如果我重复或不清楚我对ruby和rails都是新手以及对stackoverflow的新手。
我有一个现有的rails应用程序,里面有很多基础设施。我想采用它的一些模型,将它们嵌套在命名空间中,并将所有这些放入ruby gem中,以便在其他rails应用程序中使用。根据我的理解,rails的加载路径存在问题,因为它们是惯例,而定义另一个引擎的问题是因为你有两个并且它们会崩溃。
我一直在寻找指导或教程,以便在没有太多运气的情况下学习如何做到这一点,但我很肯定,如果有人可以指出我的话会很棒。
我尝试使用引擎制作宝石会因碰撞或缺少导轨而失败。
我正在运行rails 3.2.3和ruby 1.9.3。
答案 0 :(得分:20)
是的,您可以创建包含模型的gem,并将它们包含在多个Rails应用程序中。这是一种方法:
创建一个gem:module DemoGem
class Student < ActiveRecord::Base
end
end
创建或移动模型到demo_gem。我更喜欢将它们放在gem的 lib / 文件夹中,例如 demo_gem / lib / app / models / student.rb 。
require "demo_gem/version"
require "demo_gem/app/models/student.rb"
module DemoGem
# Your code goes here...
end
需要 demo_gem / lib / demo_gem.rb
中的所有模型gem 'demo_gem', path: '../demo_gem'
在您的Rails应用程序 Gemfile 中包含gem(我假设您的代码不是开源的,并且您不打算发布gem):
DemoGem::Student
现在,您可以在多个rails应用程序中的任何位置使用这些模型,只需使用<Table id="testTable" class="navTableControlLayout" growing="true">
<headerToolbar id ="testTable_testToolbar">
<Toolbar id="testToolbar">
<Label id="testTitle" text="{viewProperties>/catalogTitleText}" class="sapMH4FontSize" visible="{viewProperties>/catalogTitleVisible}" />
<ToolbarSpacer id="testSpacer" />
</Toolbar>
</headerToolbar>
</Table>
。
这里假设您使用单个数据库并且表存在。但是,您可以在gem中创建迁移,并使用Rails generators将其复制到app。
答案 1 :(得分:1)
从本手册开始 - http://guides.rubyonrails.org/engines.html
使用命令创建引擎
$ rails plugin new "EngineName" --mountable
将所有您需要的,型号,控制器e.t.c放入您的引擎中。从中生成宝石。 将此gem添加到MasterApp中。所有模型都将在EngineName命名空间下可用。