Ruby on rails Rails引擎关注自动加载路径

Ruby on rails Rails引擎关注自动加载路径,ruby-on-rails,rails-engines,Ruby On Rails,Rails Engines,我有一些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:

我有一些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/app/models/core/concerns/user_helper.rb
模芯
模块用户助手
扩展ActiveSupport::关注点
包括做
#一些方法
结束
结束
结束
#core/app/models/core/user.rb
模芯
类用户
但是,它表示未初始化的常量Core::UserHelper。所以引擎在默认情况下似乎不会加载它的关注点,所以我在自动加载路径中添加了它

module Core
  class Engine < ::Rails::Engine
    config.autoload_paths += %W(#{Core::Engine.root}/app/models/core/concerns)
    isolate_namespace Core
  end
end
模块核心
类引擎<::Rails::引擎
config.autoload_路径+=%W(#{Core::Engine.root}/app/models/Core/concerns)
隔离名称空间核心
结束
结束
现在我结束了这个错误:无法自动加载常量UserHelper,需要myapp/core/app/models/core/concerns/user_helper.rb来定义它

那么这里出了什么问题?当我查看指南时,它没有关注点目录中的关注点,而是在lib/concerns下,并使用Core::concerns::mycancern引用了所有关注点,那么这是将关注点放在引擎中的位置吗

谢谢

编辑


Yury comment解释了这个问题,在rails引擎中,关注点目录似乎没有得到任何特殊的处理,并且它在模型下被视为一个普通目录,所以它中的模块必须在关注点名称空间内,当包含关注点时,如果我理解正确的话,您还必须将其包含在关注点名称空间中。我很惊讶文档中没有提到这一点。

问题必须存在于app/models | controllers/concerns/engine_name/concern_name.rb中。这将自动加载关注点


要包含该问题,请包含EngineName::ConcernName。

我也有同样的问题。您的错误是将
关注点
目录放在
app/{models | controllers}/core
目录中,而实际上应该是相反的

而不是做

app/{models/controllers}/core/concerns/user_helper.rb

改成

app/{models/controllers}/concerns/core/user_helper.rb

我花了一点时间才弄明白,因为我直觉上认为它也应该在
engine\u name
目录下


希望这有帮助。

我认为该模块应该命名为Core::Concerns::UserHelper,它可以留在
app/models/Concerns
目录中。这似乎解决了问题,提出了另一个问题,但我不认为这是另一个问题,非常感谢:)没问题,很高兴提供帮助:)可以加载子类吗<代码>应用程序/模型|控制器/关注点/引擎|名称/模型|名称/关注点|名称.rb
用于额外组织?可以。我尝试了该URL,但似乎没有加载它。也许必须增加自动加载配置?