Я переместил свою папку из lib в / app в rails 6, кажется, я не могу создать экземпляр объекта по-прежнему из-за проблемы пути загрузки - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть новое приложение rails 6, и в папке lib у меня было это:

/ lib / some_app_name / stripe / subscription / subscription_service.rb

module Someappname # Someappname is also in my application.rb 
  module Stripe
    class SubscriptionService
      def initialize(a)
        @a = a
      end
    end
  end
end

Затем я переместилПапка 'some_app_name' в:

/ app / some_app_name / stripe / subscription_service.rb

Я прочитал, что все, что находится в / app, будет автоматически загружено и перезагружено, поэтому я перешел сюда. Он также не работал в / lib.

В моем home_controller.rb я попробовал это:

ss = Someappname::Stripe::SubscriptionService.new("a")

Я получаю сообщение об ошибке:

неинициализированконстанта Someappname :: Stripe :: SubscriptionService

Что я здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Rails автоматически загружает все под /app, но есть предостережение. Первый уровень каталогов не становится частью имени модуля. Вот почему вы можете иметь class User в /app/models/user.rb (а не class Models::User).

Решение: поместите код в некоторую папку в /app. Я обычно называю это /app/lib или /app/custom или что-то в этом роде.

/app/custom/some_app_name/stripe/subscription/subscription_service.rb

(и да, убедитесь, что имена в вашем пути к файлу правильно представляют имена в пути к модулю. У вас не может быть каталогаsome_app_name для модуля Someappname, но вы можете для SomeAppName)

1 голос
/ 03 ноября 2019

Я подозреваю, что это spring, попробуйте это

bin/spring stop

И затем запустите rails console, остановка Spring заставит Rails загрузить ваше приложение свежим

Также,

если имя вашего модуля Someappname, тогда имя каталога должно быть app/someappname, а не some_app_name

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

...