Ruby on rails 如何通过路由助手最轻松地转发参数?

Ruby on rails 如何通过路由助手最轻松地转发参数?,ruby-on-rails,parameters,routing,Ruby On Rails,Parameters,Routing,这显然不起作用: redirect_to post_path(@post, :params => params) 因为Rails路由帮助程序不允许您直接设置参数散列(根据我所读的内容) 这可能会带来一些问题: redirect_to post_path(@post, params) 因为您将转发:controller和:action参数,这将把您带到来自同一个控制器和操作。这通常不是你想要的 这是可行的,但还不够,因为需要大量代码才能将所有参数(除了:action和:controlle

这显然不起作用:

redirect_to post_path(@post, :params => params)
因为Rails路由帮助程序不允许您直接设置参数散列(根据我所读的内容)

这可能会带来一些问题:

redirect_to post_path(@post, params)
因为您将转发:controller和:action参数,这将把您带到来自同一个控制器和操作。这通常不是你想要的

这是可行的,但还不够,因为需要大量代码才能将所有参数(除了:action和:controller)设置为现有参数:

redirect_to post_path(@post, {:someparameter => params[:someparameter]})

那么,最简单和最简单的方法是什么?

除了要排除的参数外,您可以轻松转发所有参数,如下所示:

redirect_to post_path(@post, params.to_hash.except(:controller, :action))
但这可能会让您仍然通过:authenticity\u token、:\u method和其他参数(如:id)发送,如果您有嵌套的资源,则可能不需要这些参数

因此,这似乎是最简单的方法,因为大多数目的是:

redirect_to post_path(@post, params.to_hash.slice(:someparameter, :anotheparameteryouwant))

这使您可以简单地指定要发送的参数(不包括其余参数),而无需编写大量代码。

如果我正确阅读本文,我认为这可能会导致Rails 4()中的内存泄漏。似乎你可以通过
参数上的
to#hash
来解决这个问题。谢谢,这是我没有意识到的一个非常有效的问题!我现在已经更新了代码。实际上,我发现
.slice
不会像
.delete
那样改变参数散列。它只返回一个新的散列。所以它应该是安全的。不管怎样,我都会在我的答案中加入
to_hash
,以防万一。