answer de Simone Carletti funciona, pero hay ocasiones en las que uno quiere construir la URL usando objetos como se describe en la guía de enrutamiento Rails, y no confiar en los ayudantes _path
.
Las respuestas de Ben y Swards intentan describir exactamente cómo hacer esto, pero para mí la sintaxis utilizada da como resultado un error (usando Rails 4.2.2, que tiene el mismo comportamiento que 4.2.4, que es la versión estable actual a partir de esta respuesta).
La sintaxis correcta para crear un URL/ruta a partir de objetos al mismo tiempo que el paso de parámetros debe ser, en oposición a una matriz anidada, en lugar una matriz plana que contiene los componentes de URL, además de un hash como el elemento final:
url_for([:edit, @post, my_parameter: "parameter_value"])
Aquí los primeros dos elementos se analizan como los componentes de la URL, y el hash se considera como parámetro (s) para la URL.
Esto también funciona con link_to
:
link_to("Link Text", [:edit, @post, my_parameter: "parameter_value"])
Cuando llamo url_for
según lo sugerido por Ben & praderas:
url_for([[:edit, @post], my_parameter: "parameter_value"])
me sale el siguiente error:
ActionView::Template::Error (undefined method 'to_model' for #<Array:0x007f5151f87240>)
La traza muestra que esta está siendo llamado de polymorphic_routes.rb
en ActionDispatch::Routing
, a través de url_for
de routing_url_for.rb
(ActionView::RoutingUrlFor
):
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:297:in `handle_list'
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:206:in `polymorphic_method'
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:134:in `polymorphic_path'
gems/actionview-4.2.2/lib/action_view/routing_url_for.rb:99:in `url_for'
El problema de ser, que está esperando un conjunto de componentes de las URL (por ejemplo. símbolos, objetos de modelo, etc.), no una matriz que contiene otra matriz.
En cuanto a la adecuada code de routing_url_for.rb
, podemos ver que cuando se recibe una matriz que tiene un hash como elemento final, será entonces extract el hash y tratar como parámetros, dejando a continuación, sólo la matriz con los componentes de las URL .
Por eso, la matriz plana con un hash como último elemento funciona, y la matriz anidada no.
¿Cómo puedo crear una ruta absoluta como esa? – shredding
Utilice '_url' en lugar de' _path': 'edit_post_url (@post,: qp =>" asdf ")' –