234 votes

Ajouter des paramètres de chaîne de requête à link_to

Je vais avoir de la difficulté à l'ajout de paramètres querystring à link_to UrlHelper. J'ai un Index de la vue, par exemple, qui a des éléments d'INTERFACE utilisateur pour le tri, le filtrage, et la pagination (via will_paginate). Le will_paginate plugin gère les échanges intra-page persistance de la querystring correctement les paramètres.

Est-il un mécanisme automatique pour ajouter la chaîne de requête de paramètres à une donner de la route nommée, ou ai-je besoin de le faire manuellement? Une grande partie de la recherche sur cette apparemment simple de construire m'a laissé complètement paumé.

modifier

Certains des défis:

  1. Si j'ai deux paramètres querystring, seau & tri, comment définir une valeur spécifique à l'un de ces dans une link_to, tout en préservant la valeur actuelle de l'autre? Par exemple:

    <%= link_to "0", profiles_path(:seau => '0', :tri=>?? ) %>

  2. Si j'ai plusieurs paramètres querystring, seau & tri & page_size, et je veux mettre la valeur à l'un de ces, est-il un moyen de "automatiquement" inclure les noms et les valeurs des autres paramètres? Par exemple:

    <%= link_to "0", profiles_path(:seau => '0', [comprennent le tri et page_size nom/valeurs ici] ) %>

  3. Le will_paginate plugin gère sa page variable et d'autres querystring variables automatiquement. Il ne semble pas être automatiquement un élément de l'INTERFACE utilisateur pour la gestion de la taille de page. Alors que j'ai vu du code pour créer une liste de sélection des tailles de page, je préférerais avoir Un des éléments de ce type (comme). Une partie de ce défi est lié à #2, une partie est liée à masquer/afficher cet élément de l'INTERFACE utilisateur basée sur l'existence/non-existence de documents. Dit d'une autre manière, je ne veux inclure la page de la taille des liens si il y a des enregistrements à la page. De plus, je préfère inclure automatiquement les autres QS variables (c'est à dire la page, seau, tri), plutôt que d'avoir à inclure son nom dans la link_to.

369voto

Fred Points 4213

L' API docs sur link_to montrer quelques exemples d'ajout querystrings à la fois nommée et oldstyle routes. Est-ce que vous souhaitez?

link_to peut aussi produire des liens avec des ancres ou des chaînes de requête:

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

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

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> <a href="http://stackoverflow.com/searches?foo=bar&amp;baz=quux">Nonsense search</a>

49voto

Siwei Shen Points 5814

utiliser "params.fusionner" pour garder les paramètres précédents. par exemple

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

voir: http://stackoverflow.com/a/4174493/445908

25voto

Greg Funtusov Points 505

Si vous voulez maintenir les params et de ne pas vous exposer à des attaques XSS, assurez-vous de nettoyer les params de hachage, ne laissant que les paramètres de votre application peut être l'envoi:

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

 

Si vous l'utiliser dans de multiples endroits, nettoyer les params dans le contrôleur:

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

# view
<%= link_to 'Link', @params.merge(per_page: 20) %>

6voto

zakelfassi Points 622

Dans le cas où vous souhaitez passer dans un bloc, par exemple, pour un glyphicon bouton, comme dans l'exemple suivant:

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

Puis, passant querystrings params pourrait être accompli par le biais de:

<%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %>
  <i class="glyphicon glyphicon-inbox></i> Nice glyph-button
<% end %>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X