Rails: control ordering of query parameters in url_for?

Viewed 2232

I'd like to generate a URL where the "p=1" query param appears at the end of the URL, like:

/path?foo=X&bar=Y&p=1

Is it possible to control the ordering of query parameters when generating URLs via:

url_for(params.merge({ p: page_num }))

?

Update:

I tried ChuckE's suggestion below. It turns out that in Ruby 1.9 Hashes are already ordered, so the code in ActiveSupport::OrderedHash is effectively no-op'd. You can verify with Ruby 1.9 that order is preserved:

>> 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}

However, url_for still puts the "p" param first. It seems that any potential solution will need to address how url_for iterates the hash.

2 Answers
Related