Как использовать redirect_to для URL-адреса без Rails с параметрами запроса?

У нас просто было использование redirect_to break из-за обновления Rails, и это привело к вопросу. Я экспериментировал, и я, похоже, не нашел способ использовать redirect_to для отправки пользователя на страницу без Rails с добавленными параметрами запроса, за исключением того, что вручную строит строку URL, что кажется стыдом. Раньше просто:

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

работал - он добавил "парм" в URL-адрес, и несколько парм были обработаны правильно. Это уже не так, поэтому мне было интересно, есть ли новый/лучший способ сделать это. Документы подразумевают, что включение Hash должно работать, но это не так:

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

Ни один из них не работает. Ручное построение строки URL прекрасно работает, но у кого-нибудь есть заклинание, которое делает эту работу более приятным способом?

Ответ 1

В соответствии с документацией любые параметры, которые не распознаются url_for, передаются модулям Route, поэтому теоретически, ваш код должен работать, если ваш параметр не отменяет один из параметров по умолчанию, который он ищет.

Однако существует хэш :overwrite_params, который вы, возможно, можете передать:

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

Надеюсь, что это поможет.

Ответ 2

Running Rails 5.0 и нашел, что это самое простое решение:

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

Единственное другое решение, которое я нашел на этой странице, которое работало, было при указании хоста (см. комментарий Topher Fangio о его собственном сообщении), однако вам также нужно указать порт в случае, если исходный url находится на другом порт (обычно это относится к средам разработчиков).