Rails redirect_to with params

时间:2012-03-12 04:04:45

标签: ruby-on-rails params

我想将参数(哈希)传递给redirect_to,怎么做?例如:

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

我想重定向到页面/hello

这样的网址:/hello?parm1=hi&parm2=hi

4 个答案:

答案 0 :(得分:22)

如果你没有/ hello的命名路由,那么你必须将params硬编码到你传递给redirect_to的字符串中。

但如果你有类似hello_path的内容,那么可以使用redirect_to hello_path(:param1 => 1, :param2 => 2)

答案 1 :(得分:6)

而不是:

 redirect_to some_params

你可以这样做:

 redirect_to url_for(some_params)

您将params转换为包含url_for的网址,然后再将其传递给redirect_to,因此您传递的内容redirect_to最终会成为一个字符串的网址,redirect_to很乐意重定向到。

注意:我不明白为什么redirect_to拒绝使用参数。它曾经愿意使用params。在某些时候,有人向Rails添加了一些内容以禁止它。这让我怀疑这样做有安全原因,如果是这样,这些安全原因可能意味着手动执行redirect_to url_for(p)也会带来安全隐患。但我还没有找到任何文件来解释这里的内容。

更新:我发现了安全警告,但还没有消化它:https://github.com/rails/rails/pull/16170

答案 2 :(得分:1)

简单地说,将哈希值传递给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}"

我知道这可能是非常基本的方法,但是嘿,它会让你到达某处:)

答案 3 :(得分:1)

最简单的方法(如果它不是命名路线)将是:

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

请参阅:http://apidock.com/rails/Hash/to_param