Rails中默认RESTFUL路由的覆盖方法

Joh*_*uff 5 rest resources routing ruby-on-rails

给出下面的一行代码 routes.rb

map.resources :users
Run Code Online (Sandbox Code Playgroud)

生成的路由可能是这样的:

      users GET    /users(.:format)           {:controller=>"users", :action=>"index"}
            POST   /users(.:format)           {:controller=>"users", :action=>"create"}
   new_user GET    /users/new(.:format)       {:controller=>"users", :action=>"new"}
  edit_user GET    /users/:id/edit(.:format)  {:controller=>"users", :action=>"edit"}
       user GET    /users/:id(.:format)       {:controller=>"users", :action=>"show"}
            PUT    /users/:id(.:format)       {:controller=>"users", :action=>"update"}
            DELETE /users/:id(.:format)       {:controller=>"users", :action=>"destroy"}
Run Code Online (Sandbox Code Playgroud)

有没有办法将POST /users映射的默认HTTP方法更改{:controller=>"users", :action=>"create"}为用于PUT替代的HTTP方法?

rake routes 然后生成这样的东西:

      users GET    /users(.:format)           {:controller=>"users", :action=>"index"}
            PUT    /users(.:format)           {:controller=>"users", :action=>"create"}
   new_user GET    /users/new(.:format)       {:controller=>"users", :action=>"new"}
  edit_user GET    /users/:id/edit(.:format)  {:controller=>"users", :action=>"edit"}
       user GET    /users/:id(.:format)       {:controller=>"users", :action=>"show"}
            PUT    /users/:id(.:format)       {:controller=>"users", :action=>"update"}
            DELETE /users/:id(.:format)       {:controller=>"users", :action=>"destroy"}
Run Code Online (Sandbox Code Playgroud)

我知道这对于RESTful路由是不正确的,我只是想知道是否可以更改这些路由使用的HTTP方法.

Sha*_*ell 2

您可以显式添加一个路由来接受/usersPUT 来创建用户,但它不会替换现有的 POST 路由。

map.connect '/users(.:format)', 
   :controller => 'users', 
   :action => 'create', 
   :conditions => { :method => :put }
Run Code Online (Sandbox Code Playgroud)

您还可以添加一条用于创建用户的新路由,:member => { :create => :put }这将导致如下所示的路由:

create_users  PUT  /users/create(.:format)  {:action=>"create", :controller=>"users"}
Run Code Online (Sandbox Code Playgroud)

但我很高兴这并不能完全解决你所问的问题!