Rails:为link_to指定没有值的参数

时间:2009-11-29 16:50:47

标签: ruby-on-rails activeresource link-to-function

假设路线

map.resources :articles

你怎么得到这个

/articles?most_popular

使用link_to方法?

尝试了以下内容:

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

注意:我正在使用inherited_resourceshas_scope

3 个答案:

答案 0 :(得分:3)

如果您没有为参数添加值,则不会遵守W3C标准,该标准要求params部分的格式为field=value

我建议您在文章控制器中添加一个新的:most_popular操作。

在您的routes.rb上:

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

在您的控制器上:

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

关于你的观点:

link_to most_popular_articles_path() # /articles/most_popular

这将符合HTML标准,您的网址看起来几乎相同(更改一个?一个/),您的控制器将被简化(您将从索引中分离出最常用的操作)。

问候!

更新(2017):似乎W3C标准没有强制要求field=value语法(或者不再强制要求它)。但是,有些服务器会记录在不符合此语法的查询上“阻塞”。有关详细信息,请参阅Is a url query parameter valid if it has no value?

答案 1 :(得分:1)

你拥有的最后一个例子:

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

是正确的方法。否则你可以手工构建链接:

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

答案 2 :(得分:0)

请参见https://stackoverflow.com/a/4557763/803804

该规范不强制使用os.environ["PYSPARK_SUBMIT_ARGS"] = "--packages <kafka>" sc = get_context() 格式,实际上?key=value很好。

此外,Rails(和大多数框架)将处理它。

在Rails中,它将把它转换成看起来像?key

的参数。

不幸的是,将值为nil的参数传递到rails url帮助器中将导致该参数未添加到查询字符串中,因此我发现做到这一点的唯一方法是{ 'key' => nil }