Rails: params ohne Wert link_to specifing
-
08-07-2019 - |
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
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>