Я решил немного изменить рефакторинг своего кода, так как один из моих проектов стал действительно большим. Поэтому для ясности я решил назвать пространство некоторых моделей в совершенно независимых модулях.
Однако, у моих контроллеров есть дополнительный внешний модуль, так как у меня есть разные субдомены или разные виды контроллеров для всех этих моделей.
Поэтому у меня есть модель A::MyModel
в app/models/a/my_model.rb
и контроллеры X::A::MyModelsController
и Y::A::MyModelsController
в app/controllers/x/a/my_models_controller.rb
и `app / controllers / y / a / my_models_controller.rb.
Я получаю, только на некоторых конечных точках, исключение LoadError: Unable to autoload constant MyModel, expected [...]/app/models/a/my_model.rb to define it
. Исключение довольно ясно, за исключением того, что оно должно искать A::MyModel
.
Это происходит только на некоторых конечных точках, мне даже удалось заставить его работать на конечной точке с AJAX, но не в HTML. Тем не менее, он работает правильно с Rspecs, так как ни один из моих тестов не пройден.
Я подозреваю, что это как-то связано с автозагрузкой, так как при сбое он даже не попадает в контроллер: в журналах нет стека и Processed By xxx
.
Я использую Ruby 2.4.2, Rails 5.2.0, и вот мой application.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
Удивительно, но при использовании Ajax с contentType: "application/json"
он, похоже, не работает. Те же самые конечные точки без ajax или без этого contentType, кажется, работают.
Мой контроллер
class X::A::MyModelsController
def create; end
end
Кто-нибудь знает об этом?
Спасибо!