ruby-on-rails – 为什么当控制器被子类化时,Rails before_filter会调用两次?

我在Rails 2.3.5,我有这个问题:
class BaseController < ApplicationController
  before_filter :foo,:only => [:index]
end

class ChildController < BaseController
  before_filter :foo,:only => [:index,:show,:other,:actions]
end

问题是在ChildController上,foo before filter被调用两次.

我已经尝试了许多解决这个问题的解决方法.如果我没有在子代码中包含:index操作,它将永远不会被调用.

我找到的解决方案是有用的,但我认为这非常非常丑陋

skip_before_filter :foo
before_filter :foo,:actions]

有没有更好的方法解决这个问题?

解决方法

“此行为是设计使然”.

控制器上的Rails指南说明:

“过滤器是继承的,所以如果在ApplicationController上设置过滤器,它将在应用程序中的每个控制器上运行.

这解释了你所看到的行为.它还建议您提出的完全相同的解决方案(使用skip_before_filter)来定义特定控制器和/或方法将要执行哪些过滤器或不运行哪些过滤器.

那么,丑陋还是不好,似乎你发现的解决方案是常见和批准的做法.

http://guides.rubyonrails.org/action_controller_overview.html#filters

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...