Supposing the route
map.resources :articles
how do you get this
/articles?most_popular
using link_to
method?
tried the following:
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
note: i'm using inherited_resources with has_scope
The last example you have:
Is the correct way. Otherwise you could just construct the link by hand:
If you don't add a value to the parameters you will not be respecting the W3C standard, which mandates that the params section has the form
field=value
.I recommend that you add a new :most_popular action to your articles controller instead.
On your routes.rb:
On your controller:
On your views:
This will be HTML-compliant, your urls will look practically the same (changing one ? by one /) and your controller will be simplified (you will have the most_popular action separated from the index).
Regards!
Update (2017): It appears that the W3C standard doesn't mandate the
field=value
syntax (or doesn't mandate it any more). However some servers are documented to "choke" on queries not complying with this syntax. See Is a url query parameter valid if it has no value? for details.