Yuv*_*rmi 20 ruby ruby-on-rails
我有以下代码
def show
unless logged_in?
login_required
return
end
#some additional code
#that should only execute
#if user is logged in
end
Run Code Online (Sandbox Code Playgroud)
这非常有效.现在我想将登录检查移动到之前的过滤器中.问题是,当我从show之外的方法返回时,它不会停止show的执行...我如何停止show使用外部方法的代码(即可以从一个外部方法调用的代码)在过滤之前)?
谢谢!
Len*_*ong 18
在rails 2.0.1及更高版本中,您需要重定向或发送响应以停止执行操作.
#45840:以下内容不正确:
"如果before过滤器返回false,则过滤器链的处理终止,并且操作不会运行.过滤器也可以呈现输出或重定向请求,在这种情况下,原始操作永远不会被调用."
before_filter不再停止处理过滤器链,返回false.
从Rails 2.0.1的发行说明:*更改before_filter停止在渲染或重定向上自动发生但不再仅仅返回false [David Heinemeier Hansson]
- 罗伯特克里斯蒂
redirect_to,render和head将全部停止执行.例如,head :ok仅使用OK HTTP响应代码响应请求,操作将不会执行.
Chr*_*ald 16
如果从before_filter返回false,则请求的执行将立即停止.
如果你只是让你的login_required方法返回false(或重定向),如果他们没有登录,并使它返回true,如果它们,那么before_filter :login_required,它应该完美地工作.
编辑:正如Lenry在下面所述,这在Rails 2.0.1+中不起作用,而是head :ok在代码中停止使用请求
| 归档时间: |
|
| 查看次数: |
15803 次 |
| 最近记录: |