【问题标题】:Rails and Devise - Namespace is Uninitialised ConstantRails 和 Devise - 命名空间是未初始化的常量
【发布时间】:2012-02-17 14:34:14
【问题描述】:

我正在尝试使用命名空间来声明一个 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

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

class Api::V1::TokenAuthenticationsController < ApplicationController

...

  def log_in

  ...

  end

...

end

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby api routing namespaces


    【解决方案1】:

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

    给定控制器的类名称Api::V1::TokenAuthenticationsController,rails 预计它会存在于app/controllers/api/v1/token_authentications_controller.rb

    如果您只是将控制器移动到正确的文件夹,我认为您应该没问题。

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

    module Api
      module V1
        class TokenAuthenticationsController
    
    ...
    
        end
      end
    end
    

    【讨论】:

    • 这是文件夹结构。无需声明模块。它必须是隐含的。谢谢。
    • @Frost 如果我只想在 url 中添加命名空间而不更改目录结构或将模块名称作为控制器名称的前缀怎么办?
    • 好的,我知道了。我应该只使用scope 而不是namespace
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多