如何最轻松地通过路线助手转发params?

Mag*_*gne 2 parameters routing ruby-on-rails

这显然不起作用:

redirect_to post_path(@post, :params => params)
Run Code Online (Sandbox Code Playgroud)

由于Rails路由助手不允许你直接设置params哈希(从我读过的).

这可能会带来一些问题:

redirect_to post_path(@post, params)
Run Code Online (Sandbox Code Playgroud)

因为您将转发:controller和:action参数,这将带您进入相同的控制器和您来自的操作.这通常不是你想要的.

这是有效的,但是不够,因为它很麻烦,因为需要大量的代码来将所有参数(除了:action和:controller)设置为现有的params:

redirect_to post_path(@post, {:someparameter => params[:someparameter]})
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*gne 9

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

redirect_to post_path(@post, params.to_hash.except(:controller, :action))
Run Code Online (Sandbox Code Playgroud)

但这可能会让你仍然通过发送:authenticity_token,:_ method和其他参数,如:id,如果你有一个嵌套资源,你可能不想要.

因此,似乎这是最简单的方法,对于大多数用途来说:

redirect_to post_path(@post, params.to_hash.slice(:someparameter, :anotheparameteryouwant))
Run Code Online (Sandbox Code Playgroud)

这让您只需指定要发送的参数(不包括其余参数),而无需大量代码.