Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use redirect_to to a non-Rails URL with query params?

We just had an existing use of redirect_to break due to a Rails upgrade, and it led to a question. I've been experimenting, and I don't seem to find a way to use redirect_to to send the user to a non-Rails page with query parameters appended, except by manually constructing the URL string, which seems like a shame. Previously, just a simple:

redirect_to "http://www.web.com/myurl" "parm"

was working -- it appended "parm" onto the URL, and multiple parms were handled correctly. That's no longer the case, so I was wondering if there's a new/better way to do this. The docs imply that including a Hash should work, but it doesn't:

redirect_to ("http://www.web.com/myurl", :parm => "foo")
redirect_to ("http://www.web.com/myurl", { :parm => "foo" } )

Neither one works. Manually building the URL string works fine, but does anyone have an incantation that makes this work a nicer way?

like image 612
Masonoise Avatar asked Nov 13 '09 17:11

Masonoise


2 Answers

Running Rails 5.0 and found this to be the simplest solution:

args = { foo: 'bar' }
redirect_to 'https://otherwebsite.com/path?' + args.to_query

The only other solution that I found on this page that worked was when specifying the host (see Topher Fangio's comment on his own post), however, then you also have to specify the port in case the original url is on a different port (which is usually the case for dev environments).

like image 59
fgblomqvist Avatar answered Oct 16 '22 03:10

fgblomqvist


According to the documentation, any parameters that are not recognized by url_for are passed on to the Route modules, so in theory, your code should work unless your parameter overrides one of the default ones that it looks for.

However, there is an :overwrite_params hash that you can supposedly pass:

redirect_to 'http://www.web.com/myurl', :overwrite_params => { :parm => 'foo' }

Hope this helps.

like image 5
Topher Fangio Avatar answered Oct 16 '22 03:10

Topher Fangio