Rails использует фильтры before
, after
и around
_action
только на "действиях" .Контроллеры Restfull должны определять только 7 действий :
- show
- index
- edit
- update
- new
- create
- destroy
Обычно контроллеры не определяют действие initialize
, хотя они наследуют метод initialize
от своего родительского класса,То есть в рельсах нет маршрута, который будет использовать метод инициализации контроллера.Поскольку при открытии действия index
Spree::Admin::ReportsController
не выполняется initialize
, фильтр post_initialize
никогда не запускается.
Rails не имеет обратного вызова after_initialize для своих контроллеров, только для его моделей,Если вы хотите добавить код в функцию инициализации контроллера, вы можете открыть класс заново и перезаписать инициализатор (не рекомендуется) или создать подкласс контроллера, вызвать super в новом инициализаторе и добавить код после слов.
Spree::Admin::ReportsController.class_eval do
def initialize
super
Spree::Admin::ReportsController.add_available_report!(:custom_sales_total)
end
end
или
class CustomSalesTotalController < Spree::Admin::ReportsController
def initialize
super
Spree::Admin::ReportsController.add_available_report!(:custom_sales_total)
end
end
Именно это и делает Spree под капотом .