rails3在沙箱环境中工作

时间:2011-05-10 05:34:17

标签: ruby-on-rails sandbox

有没有办法在rails中打开/关闭sanbox环境for activerecord?

我正在开发一个rails应用程序。我有一个案例,我需要从xls和csv文件加载数据。表的每一行都单独插入数据库。当在任何行中发现某些错误时,我需要取消所有先前插入的行并显示错误消息。完美的解决方案是“打开”沙盒环境以进行活动记录,插入数据,然后如果每一行都正确,则使之前的插入“发生”,然后“关闭”沙箱环境。这可能在铁轨上吗?

1 个答案:

答案 0 :(得分:2)

这取决于这些插入的时间。如果您不介意在那段时间锁定数据库,可以使用事务:

MyModel.transaction do
   objects.each do |object|
      object.attributes = values
      object.save!
   end
end

事务本身可以解除所有异常,如果发生任何异常,则会回滚所有以前的保存。