rails3 работает в среде песочницы

Есть ли способ включить/выключить среду sanbox для активной записи в рельсах?

Я разрабатываю приложение для рельсов. У меня есть случай, когда мне нужно загрузить данные из файлов xls и csv. Каждая строка таблицы вставляется в базу данных отдельно. Когда в какой-либо строке обнаруживается какая-то ошибка, мне нужно отменить все ранее вставленные строки и показать сообщение об ошибке. Идеальным решением было бы «включить» среду песочницы для activerecord, вставить данные, затем, если каждая строка верна, сделать предыдущие вставки «произошедшими», а затем «выключить» среду песочницы. Возможно ли это в рельсах?


person Esenbek Kydyr uulu    schedule 10.05.2011    source источник


Ответы (1)


Это зависит от того, сколько времени занимают эти вставки. Если вы не возражаете заблокировать базу данных на это время, вы можете использовать транзакции:

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

Транзакция сама восстанавливает все исключения, и если они возникают, все предыдущие сохранения откатываются.

person Jan Minárik    schedule 10.05.2011
comment
+1 Транзакции — это стандартный способ справиться с серией обновлений базы данных «все или ничего». Я подозреваю, что то, что user534861 называет песочницей, просто так. - person Elad; 10.05.2011