开发者

Rails: Specifing params without value to link_to

Supposing the route

map.resources :articles

how do you get this

/articles?most_popular

using link_to method?

tried the following:

link_to articl开发者_如何学编程es_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


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:

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

On your controller:

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

On your views:

link_to most_popular_articles_path() # /articles/most_popular

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.


The last example you have:

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

Is the correct way. Otherwise you could just construct the link by hand:

<a href="<%= articles_path %>?most_popular">articles</a>


See https://stackoverflow.com/a/4557763/803804

The spec doesn't mandate the ?key=value format and in fact ?key is just fine.

In addition Rails (and most frameworks) will handle it.

In the case of Rails it will convert this into params that look like { 'key' => nil }

Unfortunately passing a param into the rails url helpers with a value of nil will result in that param not being added to the querystring so the only way I've found to do that is articles_path + "?most_popular"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜