ruby on rails - recursos - ¿Cómo pueden compartir dos rutas con diferentes tipos de solicitud HTTP el mismo nombre?
recursos anidados rails (3)
¿Por qué usas el :as
? Parece que no es necesario en este caso.
get ''contact'' => ''contact#new''
post ''contact'' => ''contact#create''
da
Prefix Verb URI Pattern Controller#Action
contact GET /contact(.:format) contact#new
POST /contact(.:format) contact#create
En Rails 3.2 estoy usando estas declaraciones de rutas:
get ''contact'' => ''contact#new'', :as => ''contact''
post ''contact'' => ''contact#create'', :as => ''contact''
Resultan en ( rake routes
):
contact_en GET /en/contact(.:format) contact#new {:locale=>"en"}
contact_de GET /de/kontakt(.:format) contact#new {:locale=>"de"}
contact_en POST /en/contact(.:format) contact#create {:locale=>"en"}
contact_de POST /de/kontakt(.:format) contact#create {:locale=>"de"}
Ahora Rails 4.0 se queja de esta configuración:
Nombre de ruta inválido, ya en uso: ''contacto'' Puede haber definido dos rutas con el mismo nombre usando la opción
:as
, o puede estar anulando una ruta ya definida por un recurso con el mismo nombre.
Obviamente, las rutas comparten el mismo nombre, pero como los tipos de solicitud son diferentes, espero que se acepten como antes.
¿Cómo puedo decirle a Rails 4 que genere las rutas como antes en 3.2?
En su situación, simplemente no especificar la opción :as
es suficiente ya que Rails obtendrá automáticamente el nombre de la ruta:
get ''contact'' => ''contact#new''
post ''contact'' => ''contact#create''
Sin embargo, si tiene un patrón de ruta más complejo o desea hacer referencia a la ruta con un nombre diferente, debe establecer específicamente la segunda ruta a :as => nil
(o as: nil
usando la nueva sintaxis hash).
Entonces, si quisieras nombrar la ruta como person_path
, necesitarías hacer lo siguiente:
get ''contact'' => ''contact#new'', :as => ''person''
post ''contact'' => ''contact#create'', :as => nil
Si estas dos rutas tienen la misma URL, no necesita nombrar la segunda. Entonces, lo siguiente debería funcionar:
get ''contact'' => ''contact#new'', :as => ''contact''
post ''contact'' => ''contact#create''