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 /关注下,并且都使用了Core :: Concerns :: MyConcern ,这是在哪里把关注的引擎?
谢谢
编辑
Yury评论解释了这个问题,似乎在rails引擎关注目录中没有得到任何特殊处理,并且它被视为模型下的正常目录,因此其中的模块必须位于Concerns名称空间内,并且当包含关注时,您如果我理解正确,也必须将其与Concerns namesapace一起包含。 我很惊讶这在文档中没有提及。
关注点必须驻留在app / models | controllers / concerns / engine_name / concern_name.rb中。 这会自动加载问题。
要包括关注,请包括EngineName :: ConcernName。
链接地址: http://www.djcxy.com/p/47193.html