Использование исключения в цикле вызовет у вас все виды головной боли, когда вы захотите отследить проблемную запись.Что вы можете сделать, это попытаться сохранить их все, но сообщить о них с ошибками:
def import(collection)
failed = nil
transaction do
failed = collection.reject { |r| r.save }
unless (failed.empty?)
raise ActiveRecord::Rollback
end
end
failed
end
Это предполагает, что вам интересно посмотреть на ошибки.В случае сбоя каких-либо записей они будут возвращены в массиве.В противном случае вы получите ноль, что означает отсутствие ошибок.
Если вам все равно, вы всегда можете просто быстро и грязно сохранить:ActiveRecord :: RecordInvalid исключение для первого сбоя.