Ruby on rails 具有不同名称空间的模型/控制器的Rails LoadError

Ruby on rails 具有不同名称空间的模型/控制器的Rails LoadError,ruby-on-rails,ruby,namespaces,Ruby On Rails,Ruby,Namespaces,我决定对我的代码进行一些重构,因为我的一个项目开始变得非常庞大。因此,为了清晰起见,我决定在相当独立的模块中命名一些模型 但是,我的控制器有一个额外的外部模块,因为所有这些模型都有不同的子域或不同类型的控制器 因此,我在app/models/a/my_model.rb中有一个modela::MyModel require_relative "boot" require "rails" require "active_model/railtie" require "active_job/railt

我决定对我的代码进行一些重构,因为我的一个项目开始变得非常庞大。因此,为了清晰起见,我决定在相当独立的模块中命名一些模型

但是,我的控制器有一个额外的外部模块,因为所有这些模型都有不同的子域或不同类型的控制器

因此,我在app/models/a/my_model.rb中有一个model
a::MyModel

require_relative "boot"
require "rails"
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"

Bundler.require(*Rails.groups)

module MonApp; end
class MonApp::Application < Rails::Application
    config.action_view.embed_authenticity_token_in_remote_forms = true
    config.generators do |generate|
        generate.assets false
    end
    config.active_job.queue_adapter = :sidekiq

    config.autoload_paths += Dir[Rails.root.join("app", "models", "**", "*")]

    config.middleware.use I18n::JS::Middleware
    config.exceptions_app = self.routes
end
以及
app/controllers/X/A/my_models\u controller.rb
和`app/controllers/Y/A/my_models\u controller.rb中的控制器
X::A::MyModelsController
Y::A::MyModelsController

仅在某些端点上,我碰巧遇到一个异常
LoadError:无法自动加载常量MyModel,需要[…]/app/models/a/my_model.rb来定义它
。异常非常清楚,只是它应该查找
A::MyModel

它只发生在一些端点上,我甚至用AJAX让它在端点上工作,但不是在HTML中。但是,它可以与rspec一起正常工作,因为我的测试没有一个失败

我怀疑这与自动加载有关,因为当自动加载失败时,它甚至没有进入控制器:日志中没有堆栈,也没有xxx处理的

我正在使用Ruby 2.4.2、Rails 5.2.0,这是我的
应用程序.rb

require_relative "boot"
require "rails"
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"

Bundler.require(*Rails.groups)

module MonApp; end
class MonApp::Application < Rails::Application
    config.action_view.embed_authenticity_token_in_remote_forms = true
    config.generators do |generate|
        generate.assets false
    end
    config.active_job.queue_adapter = :sidekiq

    config.autoload_paths += Dir[Rails.root.join("app", "models", "**", "*")]

    config.middleware.use I18n::JS::Middleware
    config.exceptions_app = self.routes
end
有人对此有什么见解吗?
谢谢

你使用的是哪种Rails版本?你能发布你的
application.rb
?我使用Ruby 2.4.2和Rails 5.2.0。我在我的原始帖子中添加了我的
应用程序.rb
,您是否将这些类定义为
类A::MyModel
模块A;类MyModel
。你可能会认为它们的意思是一样的,但从不断查找的角度来看,它们并不是。我建议使用后者,因为它的功能更自然@JrmKrb请执行,并在错误提示
MyModel
in未在该文件中定义时报告,因为您实际上定义的是
A::MyModel
,这与此不完全相同。您还可以通过全名引用这些类,例如
A::MyModel
,这可能也会起作用。