before_filter没有取消行动

时间:2011-06-15 05:10:45

标签: ruby-on-rails before-filter

我在使用过滤器在最近从1.9(?)升级到2.3.11的Rails应用程序中工作之前遇到了麻烦。为了尝试调试它,我在控制器中放了一个before_filter:

before_filter :false_filter

以及application_controller.rb中的以下内容:

def false_filter
  puts "false filter running"
  false
end

然后我从cuc / webrat或浏览器调用该方法,并且在调用过滤器时(我可以看到puts输出消息),过滤器链不会被终止。

我想知道是否有一些尚未生成的样板代码。任何人都可以建议去哪里看看?

1 个答案:

答案 0 :(得分:96)

没有注意到前置过滤器的返回值。如果您想停止处理,则必须从过滤器中呈现内容或重定向到其他地方,from the fine guide

  

如果前置过滤器呈现或重定向,则操作将不会运行。如果计划在该过滤器之后运行其他过滤器,则它们也会被取消。

同一文字显示在5.2.0 guide

这种行为确实有意义,如果过滤器链没有完成(即中途停止过滤)那么你最终会调用控制器方法,而不是按照他们期望的方式设置的东西,那就是只是造成痛苦,痛苦和困惑,这一点都不友善或有趣。