带有params的Rails重定向_to



我想将参数(哈希)传递给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}"

我知道这可能是一种非常基本的方法,但嘿,它会让你有所收获:)

最新更新