我有一些Rails引擎叫做“Core”,并且我有:
# 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时,它没有在concerns目录下,而是在lib/concerns下,并且所有涉及concern的引用都使用Core::Concerns::MyConcern,在引擎中将concerns放在这里是否正确?
谢谢
编辑
Yury的评论解释了问题,似乎在rails引擎中concerns目录不会得到任何特殊处理,它被视为模型下的普通目录,因此其中的模块必须位于Concerns命名空间内,并且在包含concern时,您也必须使用Concerns命名空间,如果我理解正确。我很惊讶文档中没有提到这一点。
app/models/concerns
目录下。 - Yury Lebedev