3

假设路线

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

4

3 回答 3

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 兼容,您的 url 看起来几乎相同(将一个 ? 更改为一个 /)并且您的控制器将被简化(您将拥有 most_popular 操作与索引分离)。

问候!

更新(2017 年):W3C 标准似乎没有强制要求field=value语法(或不再强制要求)。然而,一些服务器被记录为“阻塞”不符合此语法的查询。请参阅如果没有值,url 查询参数是否有效?详情。

于 2009-11-30T08:56:30.777 回答
1

你有的最后一个例子:

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

是正确的方法。否则,您可以手动构建链接:

<a href="<%= articles_path %>?most_popular">articles</a>
于 2009-11-29T17:00:00.323 回答
0

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

规范没有强制要求?key=value格式,实际上?key很好。

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

在 Rails 的情况下,它会将其转换为看起来像的参数{ 'key' => nil }

不幸的是,将参数传递给值为 nil 的 rails url helpers 将导致该参数不被添加到查询字符串中,所以我发现这样做的唯一方法是articles_path + "?most_popular"

于 2020-07-25T08:13:55.053 回答