Rails redirect_to с параметрами - PullRequest
12 голосов
/ 12 марта 2012

Я хочу передать параметры (хэш) в redirect_to, как это сделать? Например:

hash = { :parm1 => "hi", :parm2 => "hi" }

и я хочу перенаправить на страницу /hello

URL-адрес как этот: /hello?parm1=hi&parm2=hi

Ответы [ 4 ]

23 голосов
/ 12 марта 2012

Если у вас нет именованного маршрута для / hello, вам придется жестко закодировать параметры в строку, которую вы передаете redirect_to.

Но если у вас было что-то вроде hello_pathтогда вы могли бы использовать redirect_to hello_path(:param1 => 1, :param2 => 2)

6 голосов
/ 11 февраля 2015

Вместо:

 redirect_to some_params

Вы можете сделать:

 redirect_to url_for(some_params)

Вы превращаете параметры в URL с помощью url_for перед передачей его на redirect_to, поэтомуто, что вы передаете redirect_to, в итоге становится URL-адресом в виде строки, которую redirect_to с удовольствием перенаправляет.

Обратите внимание : Я не понимаю, почему redirect_to отказывается использовать params.Раньше было желание использовать params.В какой-то момент кто-то добавил что-то в Rails, чтобы запретить это.Это заставляет меня подозревать, что для этого есть причины безопасности, и если так, то эти причины безопасности могут означать, что ручное выполнение redirect_to url_for(p) также имеет последствия для безопасности.Но я еще не смог найти никакой документации, объясняющей, что здесь происходит.

обновление : я нашел предупреждение безопасности, но еще не переварил его: https://github.com/rails/rails/pull/16170

2 голосов
/ 28 января 2014

Самый простой способ (если это не именованный маршрут) будет:

redirect_to "/hello?#{hash.to_param}"

См .: http://apidock.com/rails/Hash/to_param

0 голосов
/ 03 декабря 2013

Просто передайте хэш в аргумент в URL-адресе, и в своем коде проанализируйте его, чтобы получить все необходимые значения.

param_arr = []
hash.each do |key , val|
  param_arr << "#{key}=#{val}"
end
params_str = param_arr.join("&")

redirect_to "http://somesite.com/somepage?#{params_str}"

Я знаю, что это может быть очень простой способ сделать это, но эй, это вас куда-нибудь приведет:)

...