Как использовать redirect_to для не-Rails URL с параметрами запроса? - PullRequest
13 голосов
/ 13 ноября 2009

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 31 августа 2017

Запустил Rails 5.0 и обнаружил, что это самое простое решение:

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

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

3 голосов
/ 13 ноября 2009

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

Однако, есть хеш :overwrite_params, который вы можете предположительно передать:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...