Ruby on rails 当控制器被子类化时,为什么要调用两次Rails before_filter?

Ruby on rails 当控制器被子类化时,为什么要调用两次Rails before_filter?,ruby-on-rails,ruby,inheritance,actioncontroller,before-filter,Ruby On Rails,Ruby,Inheritance,Actioncontroller,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 有没有更好的方法来解决这个问题?

我在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
有没有更好的方法来解决这个问题?

“这种行为是故意的”

控制器上的导轨说明:

筛选器是继承的,因此如果在ApplicationController上设置筛选器,它将在应用程序中的每个控制器上运行

这就解释了你所看到的行为。它还建议使用与您建议的完全相同的解决方案(在过滤器之前使用skip_)来定义将为特定控制器和/或方法运行或不运行哪些过滤器

所以,无论丑陋与否,你找到的解决方案似乎是普遍的、被认可的做法


如果您不想使用
先跳过后跳过\u过滤器
,您可以始终跳过
儿童控制器中的
索引
操作:

class ChildController < BaseController
  before_filter :foo, :only => [:show, :other, :actions]
end
class-ChildController[:show,:other,:actions]
结束
但是,如果更改
BaseController
中的行为并从
索引
操作中删除筛选器,则这可能会成为一个问题。那么它就永远不会被调用,所以使用
skip\u-before\u-filter
可能是一个更好的主意

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