Frage

Nimmt man die Route

map.resources :articles

Wie bekommt man diese

/articles?most_popular

mit link_to Methode?

versucht, die folgenden:

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

Hinweis: Ich verwende inherited_resources mit has_scope

War es hilfreich?

Lösung

Wenn Sie fügen keinen Wert auf die Parameter werden Sie nicht den W3C-Standard werden zu respektieren, die vorschreibt, dass der params Abschnitt die Form field=value hat.

Ich empfehle, dass Sie eine neue hinzufügen. Statt most_popular Aktion zu Ihren Artikeln Controller

Auf dem routes.rb:

map.resources :articles, :collection => {:most_popular=>:get}

Auf dem Controller:

class ArticlesController < ApplicationController
...
def most_popular
  @articles = ...
end

Auf Ihren Ansichten:

link_to most_popular_articles_path() # /articles/most_popular

Dies wird HTML-konform, wird Ihre URLs aussehen praktisch gleich (ein Wechsel? Durch ein /) und dem Controller wird vereinfacht werden (Sie erhalten die most_popular Aktion aus dem Index getrennt haben).

Viele Grüße!

Update (2017) : Es scheint, dass der W3C-Standard nicht die field=value Syntax nicht Mandat (oder schreibt nicht es nicht mehr). Allerdings sind einige Server zu dokumentieren „Drossel“ auf Anfragen nicht mit dieser Syntax entsprechen. sehen ist ein URL-Abfrage-Parameter gültig, wenn sie hat kein Wert? .

Andere Tipps

Das letzte Beispiel Sie haben:

link_to articles_path(:most_popular => true) # /articles?most_popular=true

Ist der richtige Weg. Sonst könnte man einfach den Link mit der Hand konstruieren:

<a href="<%= articles_path %>?most_popular">articles</a>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top