after_create 在 Rails 中使用手动 SQL 查询
after_create in Rails with manual SQL query
我试图在创建另一个对象后创建一个对象,但是后者是使用 SQL 查询而不是 ActiveRecord 查询创建的。
我正在尝试在创建 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 方法。我怎样才能让它工作?
仅当您使用 ActiveRecord 本身创建模型时,才会调用 ActiveRecord 触发器。它没有任何观察数据库变化的代码。因此,如果您想在另一个 table 中触发创建,您需要将插入触发器放在您的数据库中。
试试这个 gem https://github.com/jenseng/hair_trigger 这将帮助您从 rails 代码中将触发器写入数据库。
我试图在创建另一个对象后创建一个对象,但是后者是使用 SQL 查询而不是 ActiveRecord 查询创建的。
我正在尝试在创建 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 方法。我怎样才能让它工作?
仅当您使用 ActiveRecord 本身创建模型时,才会调用 ActiveRecord 触发器。它没有任何观察数据库变化的代码。因此,如果您想在另一个 table 中触发创建,您需要将插入触发器放在您的数据库中。
试试这个 gem https://github.com/jenseng/hair_trigger 这将帮助您从 rails 代码中将触发器写入数据库。