【问题标题】:before_filter not cancelling actionbefore_filter 不取消操作
【发布时间】:2011-09-15 05:56:06
【问题描述】:

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

before_filter :false_filter

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

def false_filter
  puts "false filter running"
  false
end

然后我从 cucumber/webrat 或浏览器调用该方法,当过滤器被调用时(我可以看到 puts 输出消息),过滤器链没有被终止。

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

【问题讨论】:

  • 您可能对活动记录 before_xxx 方法感到困惑,该方法在返回 false 时不保存记录

标签: ruby-on-rails before-filter


【解决方案1】:

没有任何东西关注前置过滤器的返回值。如果你想停止处理,你必须从你的过滤器中渲染一些东西或者重定向到其他地方,from the fine guide:

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

5.2.0 guide 中出现相同的文本。

这种行为是有道理的,如果过滤器链没有完成(即在中途停止过滤),那么你最终会调用控制器方法,而事情没有按照他们期望的方式设置,那会只会引起痛苦、痛苦和困惑,而这根本不友好或有趣。

【讨论】:

  • 我正在查看的示例执行重定向,然后返回 false,然后我锁定了 false 部分,事实证明确实如此。这一切都说得通——谢谢。
  • @Henry:别难过,我发现很多 Rails 和 Ruby 文档在这样的细节上有点稀疏。
  • @muistooshort 需要一些帮助。我正在经历 Design patterns ,其中大多数使用 Interface 这不是 Ruby 的主题。所以,我无法理解它们。任何提示如何学习这些?我无法用 Ruby 编写它们。我认为逐行翻译不会是更好的选择。请给我建议。
  • 这非常有帮助。引用的文字非常明确,正是我需要看到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2015-10-07
  • 2015-11-23
  • 2014-09-02
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多