В определенной степени вы можете заменять или расширять логику в существующих классах. Это может быть вариантом для расширения встроенного плагина. Вам нужно написать новый плагин, который просто добавляет измененную логику. Используйте module prepend.
enabled_site_setting :myoverridingplugin_enabled
module ::MyOverridingPlugin
PLUGIN_NAME = "my-overriding-plugin"
class Engine < ::Rails::Engine
engine_name MyOverridingPlugin::PLUGIN_NAME
isolate_namespace MyOverridingPlugin
end
module SomeClassOverrides
def overriding_method(foo, bar)
if foo == "something"
# выполните пользовательское действие
else
# это вызовет исходную логику
super(foo, bar)
end
end
end
end
after_initialize do
SomeClass.prepend(MyOverridingPlugin::SomeClassOverrides)
end
Я использовал этот подход, чтобы ограничить некоторые контроллеры при определенных условиях.