Как я могу переопределить одну или несколько строк кода в родительском классе ruby? Например: У меня есть Rails класс контроллера с методом create
:Ruby partically override метод родительского класса
class GenericController < ApplicationController
def create
@resource = SomeClass.new
if @resource.save
...
else
...
end
end
end
И у меня есть еще один контроллер, ребенок этого контроллера
class ChildController < GenericController
def create
super do
# HERE I WANT TO DO SOME ACTIONS BEFORE SAVE.
end
end
end
Как я могу добиться этого? Я попробовал это (общий контроллер):
def create
@resource = SomeClass.new
yield if block_given?
if @resource.save
...
end
end
Но что, если я хочу пройти более одного блока? Например, если я хочу сделать обратные вызовы: after_init,: before_save,: after_save и т. Д.?
Хорошо, но что, если я хочу добавить код После создания ресурса? Затем блок будет выполняться дважды. – Roman
Спасибо =) Это то, что я хотел =) – Roman
@Roman, Если вы передали блоки своим методом создания: 1) Вам нужно будет вызвать create() несколько раз. 2) Вам нужно будет добавить переменную, указывающую, был ли блок блоком * before * или * after *. 3) Суперкласс должен был пропустить шаг 'resource.save'', если block_given? ' – 7stud