Añadir parámetros querystring a los que enlazar


Tengo dificultades para agregar parámetros querystring a link_to UrlHelper. Tengo una vista de índice, por ejemplo, que tiene elementos de interfaz de usuario para ordenar, filtrar y paginar (a través de will_paginate). El complemento will_paginate gestiona correctamente la persistencia intrapágina de los parámetros querystring.

¿Hay un mecanismo automático para agregar los parámetros de querystring a una ruta con nombre de give, o necesito hacerlo manualmente? Una gran cantidad de investigación sobre esta construcción aparentemente simple tiene me dejó desorientado.

Editar

Algunos de los desafíos:

  1. Si tengo dos parámetros querystring, bucket & sorting, ¿cómo establecer un valor específico a uno de estos en un link_to, mientras se conserva el valor actual del otro? Por ejemplo:

    <%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %>
    
  2. Si tengo varios parámetros de querystring, bucket & sorting & page_size, y quiero establecer el valor en uno de estos, ¿hay una manera de incluir' automáticamente ' los nombres y valores de ¿los parámetros restantes? Por ejemplo:

    <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %>
    
  3. El complemento will_paginate administra su variable de página y otras variables querystring automáticamente. No parece haber un elemento de interfaz de usuario automático para administrar el tamaño de la página. Si bien he visto el código para crear una lista selecta de tamaños de página, preferiría tener elementos para esto (así). Parte de este desafío está relacionado con #2, parte está relacionada con ocultar/mostrar este elemento de la interfaz de usuario basado en la existencia/inexistencia de registros. Dicho de otra manera, solo quiero incluir enlaces de tamaño de página si hay registros en la página. Además, prefiero incluir automáticamente las otras variables QS (es decir, page, bucket, sorting), en lugar de tener que incluirlas por nombre en link_to.

Author: Jeff, 2010-04-23

4 answers

Los documentos de la API en link_to muestran algunos ejemplos de cómo agregar querystrings a las rutas named y oldstyle. Es esto lo que quieres?

link_to también puede producir enlaces con anclas o cadenas de consulta:

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
#=> <a href="/profiles/1#wall">Comment wall</a>

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
#=> <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a>

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a>
 303
Author: Fred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-10 17:28:23

Si desea la forma rápida y sucia y no se preocupe por el ataque XSS, use params.merge para mantener los parámetros anteriores. por ejemplo,

<%= link_to 'Link', params.merge({:per_page => 20}) %>

Véase: https://stackoverflow.com/a/4174493/445908

De lo contrario , marque esta respuesta: parámetros.merge and cross site scripting

 48
Author: Siwei Shen申思维,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:21

Si desea mantener los parámetros existentes y no exponerse a ataques XSS, asegúrese de limpiar el hash de parámetros, dejando solo los parámetros que su aplicación puede enviar:

# inline
<%= link_to 'Link', params.slice(:sort).merge(per_page: 20) %>

 

Si lo usa en varios lugares, limpie los parámetros en el controlador:

# your_controller.rb
@params = params.slice(:sort, :per_page)

# view
<%= link_to 'Link', @params.merge(per_page: 20) %>
 23
Author: Greg Funtusov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-10 07:41:11

En caso de que desee pasar en un bloque, por ejemplo, para un botón glyphicon, como en el siguiente:

<%= link_to my_url, class: "stuff" do %>
  <i class="glyphicon glyphicon-inbox></i> Nice glyph-button
<% end %>

Entonces pasar los parámetros de querystrings se podría lograr a través de:

<%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %>
  <i class="glyphicon glyphicon-inbox></i> Nice glyph-button
<% end %>
 3
Author: zakelfassi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-29 12:36:09