触发state_machine gem中多个记录的事件

时间:2013-02-12 09:30:12

标签: state-machine

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

进行多个记录的转换
     @records.each &:event

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

感谢。

1 个答案:

答案 0 :(得分:0)

在Rails(4)中,可以使用B#transaction中讨论的SO: save an active records array(或B#save)来完成此操作。

我在200条记录上运行一个简单的state_machine事件,结果如下所示。

而不是:

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

做的:

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

正如前面提到的SO回答所述,这将把这些交易包装成一个原子动作。

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