フックに関する記事があります。ActiveSupport::Concern
Rails での実用的な実装は次のとおりです。
module ActionController
class Base < Metal
include AbstractController::Layouts
end
end
module AbstractController
module Layouts
extend ActiveSupport::Concern
include Rendering
included do
class_attribute :_layout, :_layout_conditions, :instance_accessor => false
self._layout = nil
self._layout_conditions = {}
_write_layout_method
end
module ClassMethods
...
end
end
end
module AbstractController
module Rendering
extend ActiveSupport::Concern
included do
class_attribute :protected_instance_variables
self.protected_instance_variables = []
end
module ClassMethods
...
end
end
end
ruby フックの前にextend
呼び出しはどのようにLayouts
実行されますか? を最初に実行する必要がありますappend_features
。extend
結局、要点はappend_features
Ruby のデフォルトをハイジャックして再実装することです。ただし、Ruby のドキュメントによると、このモジュール (eg ) を別のモジュール (eg ) にappend_features
インクルードした直後に が実行されます。だから私には混乱があります。その場合、上書きされたofは呼び出されません。AbstractController::Layouts
ActionController::Base
append_features
ActiveSupport::Concern