filter出现之前的顺序是什么?

filter出现之前的顺序是什么? 具体来说,关于inheiritance,before_actionfilter出现了什么顺序? 例如,这会工作:

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 

“B#show”会起作用吗? 筛选顺序有哪些规则供将来参考? 我在Rails文档中找不到任何这些内容。

我建议您查看filter上的源代码API文档

默认排序应该是

  1. :set_post
  2. :set_user

我想如果你想将:set_user推送到堆栈的顶部,你可以将A的行改为

 prepend_before_action :set_user 

另外值得指出的是,这不是关于该主题的唯一问题; SO上还有其他人 。


至于您的具体情况,看起来您需要更改A ,如上所述,以便在B运行时通过@user分配set_post


从4.2.6开始(可能在早期版本中有所改变),现在订购在child之前为parent:

  1. :set_user
  2. :set_post

从Rails 4.2.6开始,接受的答案已不再适用。 它可能早先改变了,但那是我现在的版本。

现在在子filter之前调用父filter,因此现在排序为:

  1. :set_user
  2. :set_post

并且,如果你考虑一下,那个顺序真的更有意义。 如前所述,如果您需要子prepend_before_action在父prepend_before_action之前调用filter,则需要使用prepend_before_action

是的,您的代码将按预期工作。

派生类(B)上的before_filters在基类(A)的before_filters之前调用。 所以调用方法的顺序是:

  1. set_user()
  2. set_post()
  3. 节目()

另请注意,after_filters以相反的顺序调用,最先导出。