after_create в Rails с ручным SQL-запросом
Я пытаюсь создать объект после создания другого объекта, однако последний объект создается с использованием SQL-запроса, а не запроса ActiveRecord.
Я пытаюсь создать EventCode, когда создается новый экземпляр xyz, как показано ниже:
class xyz < abc
after_create :create_event_code
def create_event_code
event = UtilityDrEvent.find(self.utility_dr_event_id)
participant = ParticipantAccount.find(self.participant_account_id)
EventCode.generate_and_save(event, participant)
end
end
Но новые экземпляры xyz создаются таким образом:
insert_sql = 'INSERT INTO xyz (a_id, b_id)'
Таким образом, метод after_create никогда не вызывается. Как я могу заставить это работать?
1 ответ
Триггеры ActiveRecord вызываются только при создании модели с использованием самого ActiveRecord. Он не имеет никакого кода, который наблюдает за изменениями в базе данных. Поэтому, если вы хотите инициировать создание в другой таблице, вам нужно поместить триггеры вставки в вашу базу данных.
Попробуйте этот гем https://github.com/jenseng/hair_trigger это поможет вам записать триггеры в вашу базу данных из вашего кода rails.