4

我有一个使用 mongo db 的 rails 项目,并且我编写了一个名为“report_service”的可挂载引擎。

我在 main 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
4

1 回答 1

4

废弃该更新。只需添加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,这就是为什么您会收到未初始化的常量错误的原因。因为查看控制台输出。

加载宝石工作正常。

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>'

您会收到未初始化的常量错误,因为它不是必需的。试试看,让我知道你的进展如何

于 2013-08-14T12:12:56.033 回答