Да, before_filter
- это метод в ActionController :: Base. Все, что указано в before_filter
, будет выполнено до вызова действия (й).
Документация по API: http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html#M000316
EDIT:
Когда вы пишете непосредственно в класс, этот код выполняется, когда класс загружается в интерпретатор.
Набрав это в IRB:
>> class Hello
>> p "hello"
>> end
"hello"
так что в случае, когда вы упомянули, ruby видит метод before_filter
и пытается найти его. Он начинает искать в своем классе, затем переходит к родителю и родителю родителя и так далее, пока не доберется до Object
. В этом случае он перейдет к классу ActionController :: Base и будет искать before_filter
, а затем подниматься по цепочке до класса, модуля и объекта.
>> ActionController::Base.class
=> Class
>> ActionController::Base.class.superclass
=> Module
>> ActionController::Base.class.superclass.superclass
=> Object
>> ActionController::Base.class.superclass.superclass.superclass
Если вы готовы к чтению, я настоятельно рекомендую MetaProgramming Ruby , он гораздо лучше объясняет объектную модель, чем я.