ruby on rails - multiple - Parámetros de consulta con url_for?
rails link_to multiple lines (5)
url_for([:edit, @post])
Está trabajando y generando /comments/123/edit
. Ahora necesito agregar un parámetro de consulta, para que en lugar de
/comments/123/edit
es
/comments/123/edit?qp=asdf
Intenté url_for([:edit, @post], :qp => "asdf")
pero no lo url_for([:edit, @post], :qp => "asdf")
.
En los carriles 4 puede hacer esto: url_for([[:edit, @post], :qp => "asdf"])
Tenga en cuenta la sintaxis de matriz adicional.
La answer de Simone Carletti sí funciona, pero hay ocasiones en que uno quiere construir la URL utilizando objetos como se describe en la guía de enrutamiento de Rails, y no confiar en los ayudantes _path
.
Las respuestas de Ben y Swards están tratando de describir exactamente cómo hacerlo, pero para mí la sintaxis utilizada produce un error (el uso de 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 una URL / ruta a partir de objetos al mismo tiempo que pasa parámetros debe ser, en lugar de una matriz anidada, en lugar de una matriz plana que contiene los componentes de la URL, más un hash como elemento final:
url_for([:edit, @post, my_parameter: "parameter_value"])
Aquí, los dos primeros elementos se analizan como los componentes de la URL, y el hash se considera como un 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 a url_for
como lo sugiere Ben & Swards:
url_for([[:edit, @post], my_parameter: "parameter_value"])
Obtuve el siguiente error:
ActionView::Template::Error (undefined method ''to_model'' for #<Array:0x007f5151f87240>)
El rastreo muestra que se está llamando desde polymorphic_routes.rb
en ActionDispatch::Routing
, a través de url_for
desde 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 es que está esperando una matriz de componentes de URL (por ejemplo, símbolos, objetos modelo, etc.), no una matriz que contenga otra matriz.
Al routing_url_for.rb
code apropiado de routing_url_for.rb
, podemos ver que cuando recibe una matriz que tiene un hash como elemento final, luego extract el hash y lo tratará como parámetros, dejando solo la matriz con los componentes de la URL.
Es por eso que la matriz plana con un hash como el último elemento funciona, y la matriz anidada no.
Puedes pasar params
a url_for
. Verifique en el código fuente: https://github.com/rails/rails/blob/d891c19066bba3a614a27a92d55968174738e755/actionpack/lib/action_dispatch/routing/route_set.rb#L675
Puedes usar polymorphic_path
polymorphic_path([:edit, @post], :qp => ''asdf'')
Utilice rutas con nombre.
edit_post_path(@post, :qp => "asdf")