我正在使用一个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
有人做过类似的事吗?
答案 0 :(得分:1)
实际上我设法在行动产生后重新定位过滤器。您只需重新定义response.location属性并将response.status重置为302(而不是200)。
答案 1 :(得分:0)
您无法屈服,然后再重定向/渲染。如果你需要在你周围的过滤器中使用控制器动作中的一些逻辑,考虑将该逻辑移动到before_filter,或者周围过滤器的第一个块,以便它在around过滤器中可用,以确定要做什么(重定向) ,或以其他方式屈服),也可用于你将要屈服的行动