Forum: Ruby on Rails will_paginate links have broken urls

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
73c04e9ef9ca435c5b19a2e765ae6d20?d=identicon&s=25 Max Williams (max-williams)
on 2009-06-08 11:39
hey folks

I have a page that used to have a url in this sort of form


I changed the format to be nicer - using the name of the properties and
seperating with a +


The '+' acts as a join between two property ids effectively, so in the
controller the last part is split on +, and the above is equivalent to
the first url.

This all works fine, and gives a nicer url.  However, will_paginate is
now doing something strange - the paginate links for the page now come
out like this:


where i'd expect them to be this, ie to just add the param to the end of
whatever the current page is:


Before/while i dive into the guts of will_paginate to see what might be
going wrong, can anyone shed any light?

73c04e9ef9ca435c5b19a2e765ae6d20?d=identicon&s=25 Max Williams (max-williams)
on 2009-06-08 14:11

This was nothing to do with will_paginate at all - it was down to me
doing something bad in the controller.  It's maybe a bit of a gotcha.

There was a key in params called :property_ids, which could point to a
string or an array.  If it's a string, then i need to split it on the +
sign and turn it into an array.

The problem was i was doing this by altering the contents of params
itself, like this:

      if params[:property_ids].is_a?(String)
        params[:property_ids] = params[:property_ids].split("+")

This was then being passed through to the page, in @template.params,
which will_paginate uses, and the change from the string to an array was
making will_paginate go wrong, generating an invalid url.

So, the lesson here is 'don't alter params, copy the value out into a
variable and then do the manipulation on that'.

I ended up doing a tour into the guts of will_paginate, and then all the
way back out again, just to discover this.  doh.
This topic is locked and can not be replied to.