Rails和Devise - 命名空间是未初始化的常量

Und*_*ion 2 ruby api routing namespaces ruby-on-rails

我正在尝试使用命名空间来声明api.

我的routes.rb包含:

  devise_scope :user do
    namespace :api do
      namespace :v1 do
        match 'log_in', :to => 'token_authentications#log_in', :via => "post"
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我的*token_authentications_controller.rb*看起来像这样:

class Api::V1::TokenAuthenticationsController < ApplicationController

...

  def log_in

  ...

  end

...

end
Run Code Online (Sandbox Code Playgroud)

当我点击:api/v1/log_in时,我得到:

路由错误
未初始化的常量Api

那么我需要在某处声明命名空间吗?

Fro*_*ost 8

Rails期望命名空间遵循目录结构,除非我弄错了.

鉴于您的控制器的类名Api::V1::TokenAuthenticationsController,rails希望它能够存在app/controllers/api/v1/token_authentications_controller.rb.

如果你只是将你的控制器移动到正确的文件夹,我认为你应该没事.

您可能还想确保在某处实际声明命名空间模块,例如重构您的控制器:

module Api
  module V1
    class TokenAuthenticationsController

...

    end
  end
end
Run Code Online (Sandbox Code Playgroud)