2010-08-17 8 views
5

Dada una línea como la continuación en routes.rbInvalidar Rutas reparador por defecto en los carriles

map.resources :users 

Las rutas generadas podría ser algo como esto:

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

¿Hay alguna forma de cambiar el valor por defecto Método HTTP de POST /users mapeo a {:controller=>"users", :action=>"create"} al método HTTP que se usa para ser PUT en su lugar?

rake routes entonces generar algo como esto:

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

entiendo que esto no sería correcto para el enrutamiento REST, estoy preguntando si es posible cambiar los métodos HTTP utilizados por estas rutas .

Respuesta

2

Puede agregar explícitamente una ruta para aceptar un /users con PUT para crear usuarios, pero no reemplazará la ruta POST existente.

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

También puede agregar una nueva ruta para la creación de usuarios mediante la adición de :member => { :create => :put } que se traducirá en una ruta como esta:

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

pero aprecio que eso no se refiere exactamente lo que están pidiendo !

+0

Esto es básicamente lo que he hecho hasta ahora para evitarlo, esperaba poder seguir sin la ruta adicional y simplemente cambiar el método utilizado por la ruta creada con map.resources. –

1

Definición

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

lo hará por :users. No estoy seguro acerca de una anulación por defecto al igual que con los nombres de métodos de controlador de acción como:

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

¿Qué es lo que puede haber estado pidiendo.

Cuestiones relacionadas