首页 > 解决方案 > LoadError (Unable to autoload constant Api::V1::UserTokenController) Knock Gem

问题描述

由于这是一个全新的应用程序,我使用的是 Rails 6 beta。

我正在尝试使用 Knock Gem,但是在尝试通过发布用户获取 API 响应时,我收到此错误:

LoadError(无法自动加载常量 Api::V1::UserTokenController,预期 /Users/Simon/Sites/TGD/ginbackend/app/controllers/api/v1/user_token_controller.rb 来定义它):

但是,我确实user_token_controller.rb在那个位置有文件。我正在为我的 API 端点使用命名空间:

Rails.application.routes.draw do

  namespace :api do
    namespace :v1 do
      post 'user_token' => 'user_token#create' # <= manually placed this under the namespace
      resources :distilleries
      resources :botanicals
      resources :gins
      resources :botanicals_gins
    end
   end
end

根据 Knock 文档,我还更新了我的application_controller.rb,请注意这是位于app/controllers/而不是app/controllers/api/v1 问题吗?

class ApplicationController < ActionController::API
    include Knock::Authenticable

    private

    def authenticate_v1_user
      authenticate_for V1::User
    end

end

标签: ruby-on-railsauthenticationruby-on-rails-6

解决方案


解决了。

一切都在细节中(一如既往)。

当敲门安装程序自动生成user_token_controller时,它不知道我的路由命名空间。

所以我改变了:

class UserTokenController < Knock::AuthTokenController

至:

class Api::V1::UserTokenController < Knock::AuthTokenController

推荐阅读