Rails 3:取消在 after_save 上的插入
Posted
技术标签:
【中文标题】Rails 3:取消在 after_save 上的插入【英文标题】:Rails 3: cancel insert on after_save 【发布时间】:2012-06-01 14:53:22 【问题描述】:我有一个模型,当插入记录时,需要调用网络服务。
如果 web 服务失败(超时或其他失败),它们在数据库中的保存也应该被恢复。
我使用 after_save 回调并尝试在发生此类错误时引发 ActiveRecord::Rollback。
虽然它在 object.save 上返回 false,但它不会回滚事务。这样做的正确方法是什么?
我怎样才能确保不会创建记录?
【问题讨论】:
【参考方案1】:尝试使用 before_save
并从中返回 false。
【讨论】:
您可以在模型中查看id
存在。 id
只有在插入数据库后才会出现。【参考方案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
【讨论】:
以上是关于Rails 3:取消在 after_save 上的插入的主要内容,如果未能解决你的问题,请参考以下文章
Rails ActiveRecord 在 after_save 回调中使用最近保存的记录 ID [关闭]