我想将参数(哈希)传递给redirect_to
,如何做到这一点?例如:
hash = { :parm1 => "hi", :parm2 => "hi" }
我想重定向到页面/hello
URL如下:/hello?parm1=hi&parm2=hi
如果没有/hello的命名路由,则必须将params硬编码到传递给redirect_to
的字符串中。
但是如果你有类似hello_path
的东西,那么你可以使用redirect_to hello_path(:param1 => 1, :param2 => 2)
代替:
redirect_to some_params
你可以做:
redirect_to url_for(some_params)
在将参数传递给redirect_to
之前,您将使用url_for
将其转换为url,因此您传递的redirect_to
最终将成为一个字符串形式的url,redirect_to很乐意重定向到该url。
注意:我不明白redirect_to
为什么拒绝使用params。它曾经愿意使用params。在某些时候,有人向Rails添加了一些内容来禁止它。这让我怀疑这样做是出于安全原因,如果是这样,这些安全原因可能意味着手动执行redirect_to url_for(p)
也会带来安全隐患。但我还没有找到任何文件来解释这里的内容。
更新:我发现了安全警告,但还没有消化:https://github.com/rails/rails/pull/16170
最简单的方法(如果不是命名路由)是:
redirect_to "/hello?#{hash.to_param}"
请参阅:http://apidock.com/rails/Hash/to_param
简单地,将散列传递到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}"
我知道这可能是一种非常基本的方法,但嘿,它会让你有所收获:)