无法自动加载常量AuthenticateFromToken,需要使用./app/api/authenticate_from_token.rb进行定义

时间:2018-09-21 10:50:17

标签: ruby-on-rails autoload

当我开始编写我的第一个rails API时,我将所有API代码放在app/core/api目录下,并将其添加到自动加载路径

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

之后,我决定将API类移至app文件夹。现在,当我运行测试时,出现此错误

 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 :(得分:1)

如果该类位于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