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

Попробуй использовать before_save и верните ложь из этого.

Другие вопросы по тегам