加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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?.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读