p.m*_*los 2 ruby-on-rails ruby-on-rails-3
我在用 Rails 3.2.X
我有Controllers继承案例如下:
class ApplicationController < ActionController::Base
before_filter :do_something
protected
def do_something
end
end
Run Code Online (Sandbox Code Playgroud)
和
class ChildController < ApplicationController
before_filter :do_something_else
protected
def do_something_else
end
end
Run Code Online (Sandbox Code Playgroud)
在调用动作时ChildController我看到do_something_else之前被调用do_something.这是预期的行为吗?
即使我这样做:
append_before_filter :do_something_else
Run Code Online (Sandbox Code Playgroud)
将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
Run Code Online (Sandbox Code Playgroud)
呼叫操作Child2Controller应该被称为:1)do_something12)do_something23)do_something34)do_something45)do_something56)do_something6
但他们似乎并没有被这样称呼.
那么诀窍是什么?
相反,尝试prepend的ApplicationController before_filter:
class ApplicationController < ActionController::Base
prepend_before_filter :do_something
...
end
Run Code Online (Sandbox Code Playgroud)
关于这个主题,这个领域还有一些其他问题.这一个解决了这个问题.
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |