ruby – Rails:控制url_for中查询参数的排序?
发布时间:2020-12-17 02:18:28 所属栏目:百科 来源:网络整理
导读:我想生成一个URL,其中“p = 1”查询参数出现在URL的末尾,如: /path?foo=Xbar=Yp=1 通过以下方式生成URL时,是否可以控制查询参数的顺序: url_for(params.merge({ p: page_num })) ? 更新: 我尝试过ChuckE’s suggestion below.事实证明,在Ruby 1.9中已经
我想生成一个URL,其中“p = 1”查询参数出现在URL的末尾,如:
/path?foo=X&bar=Y&p=1 通过以下方式生成URL时,是否可以控制查询参数的顺序: url_for(params.merge({ p: page_num })) ? 更新: 我尝试过ChuckE’s suggestion below.事实证明,在Ruby 1.9中已经对Hashes进行了排序,因此ActiveSupport :: OrderedHash中的代码实际上是无操作的.您可以使用Ruby 1.9验证订单是否已保留: >> h = {one: 1,two: 2,three: 3 } {:one=>1,:two=>2,:three=>3} >> f = h.except(:one) {:two=>2,:three=>3} >> f[:one] = 1 1 >> f {:two=>2,:three=>3,:one=>1} 但是,url_for仍然首先放置“p”参数.似乎任何潜在的解决方案都需要解决url_for迭代哈希的方式. 解决方法
在进一步挖掘之后,我发现正在发生的事情是url_for实际上是按字典顺序按键排序参数,与散列中的插入顺序无关.显然,这是为了帮助缓存,因为URL params通常用于页面缓存键.
简而言之,如果不修补Hash就不能这样做,具体来说,你需要覆盖activesupport / core_ext / object / to_param.rb,这样Hash#to_param就不会在返回值上调用.sort. 相关问题:How to generate custom sorted query string URL in Rails link_to?. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |