1

我有一个模型,当插入记录时,需要调用 Web 服务。

如果 web 服务失败(超时或其他失败),它们在数据库中的保存也应该被恢复。

我使用 after_save 回调并尝试在发生此类错误时引发 ActiveRecord::Rollback。

尽管它在 object.save 上返回 false,但它不会回滚事务。这样做的正确方法是什么?

我怎样才能确保不会创建记录?

4

2 回答 2

1

您是否将其包装在 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

于 2012-06-01T15:01:27.357 回答
1

尝试使用before_save并从中返回 false。

于 2012-06-01T15:02:18.573 回答