【问题标题】:Override method for default RESTFUL Routes in RailsRails 中默认 RESTFUL 路由的覆盖方法
【发布时间】:2011-03-31 05:16:03
【问题描述】:

routes.rb 中给出类似下面的一行

map.resources :users

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

      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"}

有什么办法可以将POST /users映射到{:controller=>"users", :action=>"create"}的默认HTTP方法更改为使用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"}

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

【问题讨论】:

    标签: ruby-on-rails rest resources routing


    【解决方案1】:

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

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

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

    create_users  PUT  /users/create(.:format)  {:action=>"create", :controller=>"users"}
    

    但我很欣赏这并不能完全解决您的要求!

    【讨论】:

    • 这基本上是我到目前为止所做的解决它,希望我可以在没有额外路线的情况下取消,只需更改使用 map.resources 创建的路线所使用的方法。
    【解决方案2】:

    定义

    map.resources :users, :member =>{:create => :put}
    

    将为:users 做这件事。我不确定默认覆盖,例如动作控制器中的方法名称,例如:

    config.action_controller.resources_path_names = { :new => "create", 
            :edit => "change" }
    

    您可能一直在问什么。

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 2023-04-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多