2

当我在带有许多参数的 Rails 3.0.7 应用程序中使用 link_to 助手时,它会生成一个按字典顺序排序的 url,这可能在 Activesupport 文档中的 Hash 的 to_param 方法中提到。例如

link_to "my Link", {:u=>"user", :q=>"some query", :page=>"4"}

生成

"/search?page=4&q=some+query&u=user"

但我想要的是

"/search?u=user&q=some+query&page=4"

任何人都可以按照链接到或 url_for 的参数哈希中提供的方式进行自定义排序吗?

除非我遗漏了什么,否则这似乎与 link_to 文档中给出的示例相矛盾(ri link_to或者在文件中)/gems/actionpack-3.0.7/lib/action_view/helpers/url_helper.rb:215

  #   link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
  #   # => <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a>

当然,我可以像手动创建 URL

link_to "my Link", "/search?u=#{user}&q=#{query}&page=#{page}"

但这将缺少“Rails 方式”,并且在转义某些字符方面存在一些问题,因此将是最后一个选择。

4

2 回答 2

1

挖掘 rails 的提交日志,似乎在 rails 3.0.2 左右重新引入了to_param 排序。这是日志:

 $ git log activesupport/lib/active_support/core_ext/object/to_param.rb
...
commit 10dec0e65e1f4d87f411b4361045eba86b121be9
Author: Xavier Noria <fxn@hashref.com>
Date:   Tue Sep 28 00:32:20 2010 +0200

    let Hash#to_param and Hash#to_query sort again

    This was a regression introduced in 5c858220085dc4ddc1bec496747059dfbe32f1da. We bring
    sorting back because people rely on it, eg for constructing consistent cache keys.

commit 5c858220085dc4ddc1bec496747059dfbe32f1da
Author: Santiago Pastorino <santiago@wyeworks.com>
Date:   Thu Jul 22 05:08:34 2010 +0800

    Hash#to_param is doesn't use sort anymore, some tests added for Hash#to_param

...

我通过删除“ .sort”对文件进行了猴子修补,并且查询字符串的顺序是所需的。实现自定义 to_param 是否可以解决获取自定义排序/无排序查询字符串?在这种情况下,它应该放在哪里?

于 2011-05-19T08:56:18.190 回答
-1

有点晚了,但对于遇到这篇文章的其他人来说,使用to_query会有所帮助。请参阅此处的旧文档新文档

于 2015-04-29T20:05:56.173 回答