0

我试图在创建另一个对象后创建一个对象,但是后一个对象是使用 SQL 查询而不是 ActiveRecord 查询创建的。

我正在尝试在创建 xyz 的新实例时创建一个 EventCode,如下所示:

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 方法。我怎样才能让它工作?

4

1 回答 1

1

只有当您使用 ActiveRecord 本身创建模型时,才会调用 ActiveRecord 触发器。它没有任何代码可以观察数据库的变化。因此,如果您想在另一个表中触发创建,则需要将插入触发器放在数据库本身中。

试试这个 gem https://github.com/jenseng/hair_trigger这将帮助你从你的 Rails 代码中编写触发器到你的数据库。

于 2015-04-21T05:15:01.763 回答