before_filter没有取消行动

Hen*_*dge 50 ruby-on-rails before-filter

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

before_filter :false_filter
Run Code Online (Sandbox Code Playgroud)

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

def false_filter
  puts "false filter running"
  false
end
Run Code Online (Sandbox Code Playgroud)

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

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

mu *_*ort 96

没有注意到前置过滤器的返回值.如果你想停止处理,你必须从过滤器中渲染一些东西,或者从精细指南中重定向到其他地方:

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

5.2.0指南中显示了相同的文本.

这种行为确实有意义,如果过滤器链没有完成(即中途停止过滤)那么你最终会调用控制器方法,而事情的设置方式并不像他们期望的那样,这只会引起痛苦,痛苦和困惑,这一点都不友好或有趣.

  • @Henry:不要感觉不好,我发现很多Rails和Ruby文档在这样的细节上有点稀疏. (9认同)
  • 我正在看的例子做了一个重定向然后返回false,我锁定了错误的部分,结果证明是这样.这一切都很完美 - 谢谢. (6认同)
  • 这非常有帮助.引用的文字非常明确,正是我需要看到的内容. (2认同)