我尝试在创建另一个对象后创建一个对象,但是后一个对象是使用 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 方法永远不会被调用。我怎样才能让它发挥作用?
最佳答案
仅当您使用 ActiveRecord 本身创建模型时才会调用 ActiveRecord 触发器。它没有任何观察数据库变化的代码。因此,如果您想在另一个表中触发创建,您需要将插入触发器放置在数据库本身中。
试试这个 gem https://github.com/jenseng/hair_trigger这将帮助您从 Rails 代码中将触发器写入数据库。
关于mysql - Rails 中的 after_create 使用手动 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760014/