ruby-on-rails - 创建包含 Rails 模型的 gem

标签 ruby-on-rails plugins model rubygems rails-engines

我已经阅读了很多有关该主题的文章,但似乎没有什么能完全满足我的需求。如果我重复或不清楚某些东西,我很抱歉,因为我既是 ruby​​ 和 Rails 的新手,也是 stackoverflow 的新手。

我有一个现有的 Rails 应用程序,其中有很多基础设施。我想采用它的一些模型,将它们嵌套在命名空间中,并将所有这些模型放入 ruby​​ gem 中,以便在其他 Rails 应用程序中使用。根据我的理解, rails 的加载路径存在问题,因为它们是一种约定,并且定义另一个引擎存在问题,因为这样你就有两个引擎,它们就会崩溃。

我一直在寻找指南或教程来学习如何做到这一点,但运气不佳,但我确信如果有人能指出我的情况,那就太好了。

我尝试用引擎制作 gem ,但由于碰撞或缺少 rails 而失败。

我正在运行 Rails 3.2.3 和 ruby​​ 1.9.3。

最佳答案

是的,您可以创建包含模型的 gem 并将它们包含在多个 Rails 应用程序中。这是一种方法:

  • 创建一个 gem:捆绑 gem demo_gem

  • 创建模型或将模型移动到 demo_gem。我更喜欢将它们放在 gem 的 lib/ 文件夹中,例如 demo_gem/lib/app/models/student.rb

    module DemoGem
      class Student < ActiveRecord::Base
      end
    end
    
  • 需要 demo_gem/lib/demo_gem.rb 中的所有模型

    require "demo_gem/version"
    require "demo_gem/app/models/student.rb"
    module DemoGem
      # Your code goes here...
    end
    
  • 将 gem 包含在您的 Rails 应用程序中Gemfile(我假设您的代码不是开源的,并且您不打算发布该 gem):

    gem 'demo_gem', path: '../demo_gem'
    

现在,您可以在多个 Rails 应用程序中的任何位置使用这些模型,只需使用 DemoGem::Student

这里假设您使用单个数据库并且表存在。但是,您可以在 gem 本身中创建迁移并使用 Rails generators 将它们复制到应用程序。

关于ruby-on-rails - 创建包含 Rails 模型的 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887999/

相关文章:

ruby-on-rails - Faye 如何计算最大客户数

mysql - 选择偏移量 > 0 的最大值返回 nil

plugins - 为什么我部署的解决方案不包括插件和工作流程步骤?

java - 有没有一个工具可以按提交日期和提交人员查看 Subversion 中所有项目的 checkin 情况

swing - 自定义JCombobox默认选择背景色不可见

ruby-on-rails - 如何在 Rails 中制作 UI 组件?

ruby-on-rails - rails : Issues with getting Bootstrap Typeahead to work

c++ - 如何使 CMake 输出到 'bin' 目录?

templates - AngularJS - 在自定义指令中渲染模板之前格式化 ng-model

jquery - 在 MVC3 中使用 jQuery 函数和模型