ruby-on-rails-3 - 无法在轨道上的可安装引擎中加载模型

标签 ruby-on-rails-3 mongodb bundle rails-engines

我有一个使用 mongo db 的 Rails 项目,我编写了一个名为“report_service”的可安装引擎。

我在主 rails 项目中这样使用它:

gem 'report_service', :git => 'git@xx.com:report_service.git', :branch => :master, :require => false

我不想在初始化 Rails 项目时加载这个 gem,所以我添加了 :require => false 选项。

但是在我的 Rails 控制台中,在我执行 require 'report_service' 之后,我找不到这个 gem 中的模型。

[1] pry(main)> ReportService
=> ReportService
[2] pry(main)> ReportService::Engine
NameError: uninitialized constant ReportService::Engine
from (pry):2:in `<main>'
[3] pry(main)> require 'report_service'
=> true
[4] pry(main)> ReportService::Engine
=> ReportService::Engine
[5] pry(main)> ReportService::RsExam
NameError: uninitialized constant ReportService::RsExam
from (pry):5:in `<main>'

这是我的 report_service gem 目录和代码:

report_service/lib/report_service.rb

require "active_record/railtie"
require "report_service/engine"
module ReportService
end

report_service/lib/report_service/engine.rb

module ReportService
  class Engine < ::Rails::Engine
   isolate_namespace ReportService
  end
end

report_service/app/models/report_service/rs_exam.rb

module ReportService
  class RsExam < ActiveRecord::Base
  end
end

最佳答案

废弃那个更新。只需将 require "report_service/rs_exam" 添加到您的 report_service.rb 即可。

require "active_record/railtie"
require "report_service/engine"
require "report_service/rs_exam"
module ReportService
end

我的推理是,正在发生的事情是您加载模型 report_service/rs_exam,这就是为什么您会收到未初始化的常量错误。因为看控制台输出。

加载 gem 工作正常。

require 'report_service'
=> true

ReportService::Engine 加载正常。

[4] pry(main)> ReportService::Engine
=> ReportService::Engine

但是当你尝试加载 rs_exam 时

[5] pry(main)> ReportService::RsExam
NameError: uninitialized constant ReportService::RsExam
from (pry):5:in `<main>'

您收到未初始化的常量错误,因为它不是必需的。试试看,让我知道你过得怎么样

关于ruby-on-rails-3 - 无法在轨道上的可安装引擎中加载模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180788/

相关文章:

ruby-on-rails - 如何使用具有动态路段的 Rails 3 路线

MongoDB 递归查找查询

ios - 为什么 swift 无法识别我的资源?

node.js - 使用计算值进行聚合比较

objective-c - 是否可以在运行时更改 Storyboard语言?

java - fragment 中传递的 Arraylist 为空

ruby - Rails form_tag 需要刷新

ruby-on-rails - Rails + Heroku + Jammit

ruby-on-rails - rails 模型 : how would you create a pre-defined set of attributes?

C# MongoDB - 如何向多个嵌套数组元素添加和删除项目?