Rails 3: отменить вставку на after_save
У меня есть модель, которая при вставке записи должна вызывать веб-сервис.
Если происходит сбой веб-службы (тайм-аут или другие сбои), их сохранение в базе данных также следует отменить.
Я использовал обратный вызов after_save и пытался вызвать ActiveRecord::Rollback, когда происходит такого рода ошибки.
Хотя он возвращает false на object.save, он не выполняет откат транзакции. Как правильно это сделать?
Как я могу также убедиться, что запись не будет создана?
2 ответа
Вы заключаете это в блок транзакции Active Record?
User.transaction do
User.create(:username => 'Kotori')
User.transaction(:requires_new => true) do
User.create(:username => 'Nemu')
raise ActiveRecord::Rollback
end
end
Также см:
http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html