代码之家  ›  专栏  ›  技术社区  ›  John Duff

Rails中默认RESTFUL路由的重写方法

  •  5
  • John Duff  · 技术社区  · 16 年前

    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"} PUT 相反呢?

    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方法。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Shadwell    16 年前

    /users 使用PUT创建用户,但它不会替换现有的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"}
    

        2
  •  1
  •   Daniel Rikowski    14 年前

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

    我会为你做的 :users

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

    推荐文章