我在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