Rails: Spécifier des paramètres sans valeur à link_to
-
08-07-2019 - |
Question
En supposant l'itinéraire
map.resources :articles
comment obtenez-vous cela
/articles?most_popular
en utilisant la méthode link_to
?
a essayé ce qui suit:
link_to articles_path(:most_popular) # exception
link_to articles_path(:most_popular => nil) # /articles
link_to articles_path(:most_popular => true) # /articles?most_popular=true
remarque: j'utilise des ressources héritées avec has_scope
La solution
Si vous n'ajoutez pas de valeur aux paramètres, vous ne respecterez pas la norme W3C, qui impose que la section params se présente sous la forme field = value
.
Je vous recommande d'ajouter une nouvelle action: most_popular à votre contrôleur d'articles.
Sur votre routes.rb:
map.resources :articles, :collection => {:most_popular=>:get}
Sur votre contrôleur:
class ArticlesController < ApplicationController
...
def most_popular
@articles = ...
end
Selon vous:
link_to most_popular_articles_path() # /articles/most_popular
Ce sera conforme au HTML, vos urls seront pratiquement les mêmes (en changeant un? par un /) et votre contrôleur sera simplifié (vous aurez l'action most_popular séparée de l'index).
Cordialement!
Mise à jour (2017) : Il semble que la norme W3C n'impose pas la syntaxe field = value
(ou ne l'exige plus). Cependant, certains serveurs sont documentés comme "étranglement". sur les requêtes ne respectant pas cette syntaxe. Voir Un paramètre de requête d'URL est-il valide s'il a pas de valeur? pour plus de détails.
Autres conseils
Votre dernier exemple:
link_to articles_path(:most_popular => true) # /articles?most_popular=true
Est la bonne façon. Sinon, vous pouvez simplement construire le lien à la main:
<a href="<%= articles_path %>?most_popular">articles</a>