state machine-在state_machine gem中的多个记录上触发事件



我正在使用state_machine来转换我的一个模型中的状态。转换成功地发生在单个记录上。但是,如果我必须在多个记录上触发一个事件,该怎么办。我可以用在多个记录中进行转换

     @records.each &:event

但该方法执行查询的次数与@records的次数一样多。如何通过一个查询触发事件来进行状态转换。请帮忙。

谢谢。

在Rails(4)中,这可以使用B#transaction(或B#save)来实现,如SO中所述:保存活动记录数组。

我对在200条记录上运行一个简单的state_machine事件进行了基准测试,结果如下所示。

代替:

@records.each &:event
# Completed 302 Found in 1700ms (ActiveRecord: 778.6ms)

do:

ActiveRecord::Base.transaction do
    @records.each &:event
end
# Completed 302 Found in 977ms (ActiveRecord: 73.4ms)

正如前面链接的SO回答中所指出的,这将把这些事务封装为一个原子操作。

注意:可能存在无法解决的错误处理边缘情况。

最新更新