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.

Другие вопросы по тегам