16 ruby-on-rails rails-engines
我有一些导轨引擎'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
Run Code Online (Sandbox Code Playgroud)
但它表示未初始化的常量Core :: UserHelper.因此,默认情况下引擎似乎没有加载其关注点,因此我将其添加到自动加载路径中
module Core
class Engine < ::Rails::Engine
config.autoload_paths += %W(#{Core::Engine.root}/app/models/core/concerns)
isolate_namespace Core
end
end
Run Code Online (Sandbox Code Playgroud)
现在我结束了这个错误:无法自动加载常量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中.我很惊讶这在文档中没有提到.
小智 25
问题必须存在于app/models | controllers/concerns/engine_name/concern_name.rb中.这将自动加载关注.
要包含关注点,请包含EngineName :: ConcernName.
我遇到过同样的问题。你的错误是你把concerns目录放在app/{models|controllers}/core目录中,而它应该是相反的。
而不是做
app/{models/controllers}/core/concerns/user_helper.rb
把它改成
app/{models/controllers}/concerns/core/user_helper.rb
我花了一点时间才弄清楚,因为我直觉地认为它也应该在engine_name目录下。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3925 次 |
| 最近记录: |