【发布时间】:2012-05-14 11:38:15
【问题描述】:
使用 Rails 3.0.7,我正在为我们的应用程序创建一个 API,并且我有这样的设置:
routes.rb
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.rb 和app/controllers/users_controller.rb 文件以及我的app/controllers/api/v1/application_controller.rb 和app/controllers/api/v1/users_controller.rb 文件,定义如下:
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/users 路由。
我已经无计可施了。有什么建议?谢谢。 PS - 随意评论我不应该忽略的任何约定或其他我可能搞砸的事情:)
【问题讨论】:
-
原来我只需要使我所有的控制器名称都是唯一的,而不管命名空间如何。 Here's a link that helped
标签: ruby-on-rails ruby-on-rails-3 namespaces routes nested-routes