Не удалось автоматически загрузить константу AuthenticateFromToken, ожидается ./app/api/authenticate_from_token.rb для ее определения - PullRequest
0 голосов
/ 21 сентября 2018

Когда я начал писать свой первый API-интерфейс rails, я поместил весь код API в каталог app/core/api и добавил его в пути автозагрузки

config.autoload_paths += %W[
  #{config.root}/lib
  #{config.root}/app/core]

После этого я решил перенести классы API в приложениепапка.Теперь, когда я запускаю свои тесты, я получаю эту ошибку

 Failure/Error: authenticate = API::AuthenticateFromToken.(params[:auth_token])

 LoadError:
   Unable to autoload constant AuthenticateFromToken, expected ./app/api/authenticate_from_token.rb to define it

Аутентификация с токена выглядит следующим образом:

module API
  class AuthenticateFromToken

    prepend SimpleCommand

    def initialize(auth_token)
      @auth_token = auth_token
    end

    def call
      # authenticate code
    end
  end
end

До перемещения каталога api из app/coreк app У меня не было проблем с автозагрузкой.Что не так с этим кодом?

1 Ответ

0 голосов
/ 21 сентября 2018

Если класс находится в модуле API, его следует сохранить в папке api.

Проблема в том, что Rails по умолчанию автоматически загружает все папки в папке app, поэтому вам нужно будет поместить ее в app/api/api/authenticate_from_token.rb

подробнее: https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoload-paths-and-eager-load-paths

...