Метод переопределения для маршрутов RESTFUL по умолчанию в Rails - PullRequest
5 голосов
/ 18 августа 2010

Учитывая строку примерно как ниже в 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"}

Есть ли способ изменить метод HTTP по умолчанию для POST /users, сопоставляя {:controller=>"users", :action=>"create"}, чтобы метод HTTP использовался вместо 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 ]

2 голосов
/ 18 августа 2010

Вы можете явно добавить маршрут для принятия /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"}

, но я ценю, что это не совсем соответствует тому, что вы просите!

1 голос
/ 18 августа 2010

Определение

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

Сделаем это для :users.Я не уверен насчет переопределения по умолчанию, например, с именами методов в контроллере действий, например:

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

О чем вы, возможно, спрашивали.

...