有没有办法在rails中打开/关闭sanbox环境for activerecord?
我正在开发一个rails应用程序。我有一个案例,我需要从xls和csv文件加载数据。表的每一行都单独插入数据库。当在任何行中发现某些错误时,我需要取消所有先前插入的行并显示错误消息。完美的解决方案是“打开”沙盒环境以进行活动记录,插入数据,然后如果每一行都正确,则使之前的插入“发生”,然后“关闭”沙箱环境。这可能在铁轨上吗?
答案 0 :(得分:2)
这取决于这些插入的时间。如果您不介意在那段时间锁定数据库,可以使用事务:
MyModel.transaction do
objects.each do |object|
object.attributes = values
object.save!
end
end
事务本身可以解除所有异常,如果发生任何异常,则会回滚所有以前的保存。