Двигатель Rails относится к автозагрузкам

У меня есть рельсы engine '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

однако он говорит неинициализированный постоянный 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/issues/user_helper.rb, чтобы определить его

Итак, что здесь не так? Когда я проверил проводник http://edgeguides.rubyonrails.org/engines.html, и у него не было проблем в директории проблем, а скорее по lib/problems и была вся ссылка на забота об использовании Core:: Concerns:: MyConcern, так это, где поставить проблемы в движке?

Спасибо

Edit

Комментарий Юрия объяснил эту проблему, кажется, что в рельсах движкам проблем каталог не получает никакого специального лечения, и он рассматривается как обычный каталог под моделями, поэтому модули в нем должны находиться в пространстве имен Concerns и при включении беспокойство, вы должны включить его также в "Концерты", если я правильно понимаю. Я удивлен, что это не упоминается в документах.

+13
25 июн. '15 в 13:54
источник поделиться
2 ответа

Концерн должен находиться внутри приложений/моделей | контроллеры/проблемы/имя_компьютера/имя_организации .rb. Это позволит автозагрузить проблему.

Чтобы включить проблему, включите EngineName:: ConcernName.

+22
01 июн. '16 в 13:32
источник

Я была такая же проблема. Ваша ошибка заключается в том, что вы помещаете каталог concerns каталог app/{models|controllers}/core, если это не так.

Вместо того чтобы делать

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

изменить это, чтобы быть

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

Мне понадобилось немного времени, чтобы понять, потому что я интуитивно думал, что это также должно быть в engine_name.

Надеюсь это поможет.

0
04 июн. '19 в 9:01
источник

Посмотрите другие вопросы по меткам или Задайте вопрос