Dyl*_*arr 20 ruby inheritance ruby-on-rails before-filter
过滤器出现之前的顺序是什么?具体来说,关于inheiritance,before_action过滤器发生了什么顺序?例如,这会工作:
class A < ActionController::Base
before_action :set_user
def set_user
@user = something
end
end
class B < A
before_action :set_post
def show
render @post
end
def set_post
@post = @user.posts.first
end
end
Run Code Online (Sandbox Code Playgroud)
"B#show"会起作用吗?筛选顺序有哪些规则供将来参考?我在Rails文档中找不到任何相关内容.
dee*_*our 21
默认排序应该是
:set_post
:set_user
我认为,如果你想推:set_user
到堆栈的顶部,你可以改变线A
对
prepend_before_action :set_user
Run Code Online (Sandbox Code Playgroud)
另外值得指出的是,这不是关于这个主题的唯一问题; SO上还有其他人.
至于你的具体情况,看起来你需要A
像我上面提到的那样改变,以便在运行@user
时分配.set_post
B
从4.2.6开始(可能在早期版本中有所改变),订单现在是子代之前的父代:
:set_user
:set_post
从Rails 4.2.6开始,接受的答案不再正确.它可能早先改变了,但那是我现在的版本.
现在在子过滤器之前调用父过滤器,因此现在排序为:
:set_user
:set_post
而且,如果你考虑一下,那个顺序真的更有意义.如前所述,如果您需要孩子在父母之前调用过滤器,则需要使用prepend_before_action
.
归档时间: |
|
查看次数: |
9187 次 |
最近记录: |