Ссылка в принятом ответе фактически не является примером переопределения контроллера. Они упоминают «открытую классификацию» файла, но не объясняют, как именно это сделать. Если вы откроете класс обработчика в своем приложении, вы получите циклическую ошибку зависимости, потому что вы ссылаетесь / открываете класс, который в настоящее время находится в процессе определения. Таким образом, вы должны убедиться, что вы сначала загружаете фактический класс двигателя.
# in my app
# app/controllers/blazer/base_controller.rb
load Blazer::Engine.root.join('app/controllers/blazer/base_controller.rb')
Blazer::BaseController.class_eval do
filter_access_to :all
end
В моем случае я использую гем Blazer и добавляю к нему аутентификацию. Поскольку я использую декларативную авторизацию, которую Blazer не поддерживает напрямую, мне нужно открыть базовый контроллер Blazer и добавить к нему свои требования авторизации.