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

Était-ce utile?

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top