【发布时间】:2015-09-12 04:22:40
【问题描述】:
我有一些 Rails 引擎“核心”,我有:
# core/app/models/core/concerns/user_helper.rb
module Core
module UserHelper
extend ActiveSupport::Concern
included do
# some methods
end
end
end
# core/app/models/core/user.rb
module Core
class User < ActiveRecord::Base
include Core::UserHelper
end
end
但是它说未初始化的常量 Core::UserHelper。所以看起来引擎默认不会加载它的关注点,所以我在自动加载路径中添加了它
module Core
class Engine < ::Rails::Engine
config.autoload_paths += %W(#{Core::Engine.root}/app/models/core/concerns)
isolate_namespace Core
end
end
现在我结束了这个错误:无法自动加载常量 UserHelper,需要 myapp/core/app/models/core/concerns/user_helper.rb 来定义它
那么这里有什么问题呢?当我检查指南http://edgeguides.rubyonrails.org/engines.html 时,它没有关注目录中的问题,而是在 lib/concerns 下,并且使用 Core::Concerns::MyConcern 引用了所有关注点,所以这是在引擎中放置关注点的地方?
谢谢
编辑
Yury 评论解释了这个问题,似乎在 Rails 引擎中关注目录没有得到任何特殊处理,它被视为模型下的普通目录,因此其中的模块必须在关注命名空间内,并且当包含关注,如果我理解正确,您也必须将其包含在关注命名空间中。我很惊讶文档中没有提到这一点。
【问题讨论】:
-
我觉得模块应该命名为Core::Concerns::UserHelper,可以留在
app/models/concerns目录下 -
似乎这解决了问题,提出了另一个问题,但我不认为这是另一个问题,非常感谢:)
-
没问题,很高兴为您提供帮助:)
标签: ruby-on-rails rails-engines