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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Ruby相关文章