首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套命名空间路由到错误控制器

嵌套命名空间路由到错误控制器
EN

Stack Overflow用户
提问于 2012-05-04 22:46:56
回答 2查看 2.5K关注 0票数 1

使用Rails 3.0.7,我正在为我们的应用程序创建一个API,我有这样的设置:

routes.rb

代码语言:javascript
复制
  namespace :api do
    namespace :v1 do
      match "connect" => "users#login", :via => :post
      match "disconnect" => "users#logout", :via => :post
      resources :users
      match "users/:id/foos" => "foos#list", :via => :get
      match "users/:id" => "users#update", :via => :put
      match "foos/:id/bars" => "bars#list_by_foo", :via => :get
      match "foos/:id" => "foos#show", :via => :get, :constraints => { :id => /\d+/ }
      match "bars/:id" => "bars#show", :via => :get
    end
  end

  # other routes here e.g.
  match "users/find" => "users#find_by_name", :via => :get
  match "users" => "users#create", :via => :post

然后我有我的常规app/controllers/application_controller.rbapp/controllers/users_controller.rb文件,以及定义如下的app/controllers/api/v1/application_controller.rbapp/controllers/api/v1/users_controller.rb文件:

代码语言:javascript
复制
class Api::V1::ApplicationController < ApplicationController
  before_filter :verify_access

  def verify_access
    # some code here
  end
end

class Api::V1::UsersController < Api::V1::ApplicationController
  skip_before_filter, :except => [:show, :update, :delete]
end

在一切看起来都正常之前,直到我重写了一个由UsersController和Api::V1::UsersController共享的方法之前,现在似乎所有东西都指向了UsersController,尽管我是通过api/v1/user路由访问的。

我想弄清楚这件事,我的智慧到了极点。有什么建议吗?谢谢。PS --请随意评论我忽略的任何我不应该做的事情,或者其他我可能会搞砸的事情:)

EN

回答 2

Stack Overflow用户

发布于 2012-08-08 00:14:08

skip_before_filter还为“前”筛选器接受一个符号参数,而不是您希望跳过的。只要应用了适当的范围/名称空间,控制器名称就不应该是唯一的。

示例

  • api/users_controller
  • admin/users_controller
  • users_controller

然后每个控制器的代码

代码语言:javascript
复制
class Api::V1::UsersController < Api::V1::BaseController
end

class Admin:UsersController < Admin::BaseController
end

class UsersController < ApplicationController
end

然后是路线

代码语言:javascript
复制
MyApp::Application.routes.draw do

scope :module => "api" do
  namespace :v1 do
    resources :users
  end
end

namespace :admin do
  resources :users
end

  resources :users
end
票数 0
EN

Stack Overflow用户

发布于 2017-03-07 19:44:56

Rails有点混乱,但我也遇到了类似的问题。以下是您可以采取的一些步骤,以确保您不会遗漏任何小的代码问题。(这最终导致我发现了名称空间控制器中的语法错误)。

  1. 运行bundle exec rake routes以生成指向哪个控制器和操作的路由链接的列表。如果这是好的,然后移动到步骤2。如果没有,修复您的路由文件,然后再试一次。(这方面有很多很好的教程,所以我不详细介绍)
  2. 进入rails控制台,只加载控制器类。如果它不起作用,您可能发现了语法上的一个错误。下面是我尝试加载Api::V2::CampaignsController时在控制台上发生的情况。

irb> Api::V2::CampaignsController

=> CampaignsController

注意: Rails将所有请求定向到错误的控制器(基于Rails的逻辑加载控制器类)。它应该去Api::V2:: CampaignsController,但是它正在加载CampaignsController。

您还可以在控制台中使用以下方法验证它:

代码语言:javascript
复制
> app.get '/api/v2/campaigns.json'
> app.controller.class
=> CampaignsController
# This is not the expected controller. 

这最终成为我从Api::V2::CampaignsController扩展的类中的一个语法问题。

这有点令人难以置信,但希望这能帮到别人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10457076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档