我在我的一个模型中使用state_machine来转换状态。转换成功地发生在单个记录上。但是如果我必须在多个记录上触发事件该怎么办。我可以使用
进行多个记录的转换 @records.each &:event
但是此方法执行查询的次数与@records
的次数相同。如何通过一个查询触发事件来执行状态转换。请帮忙。
感谢。
答案 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回答所述,这将把这些交易包装成一个原子动作。
注意:可能无法解决的错误处理边缘情况。