当我在具有许多参数的 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"
任何人都可以按照参数哈希中提供给link_to或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&baz=quux">Nonsense search</a>
当然,我可以像
link_to "my Link", "/search?u=#{user}&q=#{query}&page=#{page}"
但这会缺少"Rails 方式",并且在转义某些字符时存在一些问题,因此将是最后一个选项。
挖掘 rails 的提交日志,似乎to_param排序正在 rails 3.0.2 左右重新引入。这是日志:
$ 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是否可以成为获取自定义排序/无排序查询字符串的解决方案?在这种情况下,应该放在哪里?
有点晚了,但对于遇到这篇文章的其他人,使用 to_query
会有所帮助。在此处查看旧文档或新文档