我想将参数(哈希)传递给redirect_to
,怎么做?例如:
hash = { :parm1 => "hi", :parm2 => "hi" }
我想重定向到页面/hello
这样的网址:/hello?parm1=hi&parm2=hi
答案 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}"