Rails 3: отменить вставку в after_save

У меня есть модель, которая при вставке записи требует вызова веб-службы.

Если веб-сервис выходит из строя (тайм-аут или другие сбои), их сохранение в базе данных также должно быть отменено.

Я использовал обратный вызов after_save и попытался вызвать ActiveRecord :: Rollback, когда возникает такая ошибка.

Хотя он возвращает false для object.save, он не откатывает транзакцию. Как правильно это делать?

Как я могу также убедиться, что запись не будет создана?


person Fernando    schedule 01.06.2012    source источник


Ответы (2)


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

person Pavel Strakhov    schedule 01.06.2012
comment
Вы можете проверить id наличие в модели. id будет присутствовать только после вставки в базу данных. - person Pavel Strakhov; 01.06.2012

Вы оборачиваете это в блок транзакций 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

person Anil    schedule 01.06.2012