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_postB
从4.2.6开始(可能在早期版本中有所改变),订单现在是子代之前的父代:
:set_user:set_post从Rails 4.2.6开始,接受的答案不再正确.它可能早先改变了,但那是我现在的版本.
现在在子过滤器之前调用父过滤器,因此现在排序为:
:set_user:set_post而且,如果你考虑一下,那个顺序真的更有意义.如前所述,如果您需要孩子在父母之前调用过滤器,则需要使用prepend_before_action.
| 归档时间: |
|
| 查看次数: |
9187 次 |
| 最近记录: |