【发布时间】:2014-02-25 14:30:55
【问题描述】:
我正在使用Rails 3.2.X
我有Controllers继承案例如下:
class ApplicationController < ActionController::Base
before_filter :do_something
protected
def do_something
end
end
和
class ChildController < ApplicationController
before_filter :do_something_else
protected
def do_something_else
end
end
在ChildController 上调用操作时,我看到do_something_else 在do_something 之前被调用。这是预期的行为吗?
即使我这样做:
append_before_filter :do_something_else
do_something_else 总是首先被调用,这不是我所期望的。
如何使子控制器上定义的before_filters 在其父控制器上定义的before_filters 之后执行。
[更新] 请注意,这个问题更笼统。我需要一个答案来涵盖ApplicationController 上的任意数量的前置过滤器以及更长的继承树上的子控制器和子控制器的子控制器上的任意数量的前置过滤器。
为了让本次更新更清晰:
class ApplicationController < ActionController::Base
before_filter :do_something1
before_filter :do_something2
end
class ChildController < ApplicationController
before_filter :do_something3
before_filter :do_somethign4
end
class Child2Controller < ChildController
before_filter :do_something5
before_filter :do_somethign6
end
应该调用Child2Controller 上的操作:1) do_something1 2) do_something2 3) do_something3 4) do_something4 5) do_something5 6) do_something6
但他们似乎不是这样称呼的。
那么有什么诀窍呢?
【问题讨论】:
-
添加评论希望其他人不会像我刚才那样浪费时间进行调试。这种行为(父过滤器之前的子过滤器)仅适用于 Rails 3.x,这就是问题被关闭的原因。从至少 4.2(可能是 4.0)开始,父过滤器被称为 BEFORE 子过滤器。
标签: ruby-on-rails ruby-on-rails-3