Dylan Karr Dylan Karr - 4 months ago 13
Ruby Question

What order do before filters occur in?

What order do before filters occur in? Specifically, what order do the before_action filters occur in, in regards to inheiritance? For example, will this work:

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


Will "B#show" work? What are the rules for filter order for future reference? I can't find any of this in the Rails documentation.

Answer

I suggest taking a look at the source code and API Docs on filters.

The default ordering should be

  1. :set_post
  2. :set_user

I think if you wanted to push :set_user to the top of the stack you could change the line in A to

prepend_before_action :set_user

Also worth pointing out, this isn't the only question on the topic; there are others here on SO.


As for your specific situation, it looks like you'll need to change A as I mentioned above in order to have @user be assigned by the time set_post in B runs.

Comments