在产生动作后重定向在过滤器周围

时间:2010-10-18 08:02:56

标签: redirect ruby-on-rails-3

我正在使用一个around过滤器,在某些情况下应该将用户重定向到其他路径之后产生一个动作(以渲染或重定向结束)。

在yield语句后围绕过滤器编写redirect_to会导致双重渲染错误。尝试“重新配置”响应对象(通过将body设置为nil并将location标头设置为所需的网址)会导致以下错误(取自控制器规范):

Failure/Error: Unable to find matching line from backtrace
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

有人做过类似的事吗?

2 个答案:

答案 0 :(得分:1)

实际上我设法在行动产生后重新定位过滤器。您只需重新定义response.location属性并将response.status重置为302(而不是200)。

答案 1 :(得分:0)

您无法屈服,然后再重定向/渲染。如果你需要在你周围的过滤器中使用控制器动作中的一些逻辑,考虑将该逻辑移动到before_filter,或者周围过滤器的第一个块,以便它在around过滤器中可用,以确定要做什么(重定向) ,或以其他方式屈服),也可用于你将要屈服的行动