删除成功(Activerecord,Rails)

时间:2013-01-16 16:02:54

标签: ruby-on-rails-3 sqlite activerecord

我正在开发一个Rails应用程序,该应用程序具有更新某些用户信息的后台进程。为此,此方法必须删除所有现有信息(存储在另一个表中)并从Internet获取新信息。问题是,如果在中期出现问题,用户在流程再次运行之前就没有信息。

有一些事情要做:

transaction = EntityUser.delete_all(:user_id => @current_user.id)
#instructions that adds new  entity
...
...
transaction.commit

任何人都可以建议我可以做些什么来避免这种问题吗?

谢谢

1 个答案:

答案 0 :(得分:1)

了解 ActiveRecord::Transactions 。你可以将所有内容都包装在一个块中

ActiveRecord::Base.transaction do
  EntityUser.delete_all(:user_id => @current_user.id)

  # ...
end

如果出现问题,您可以在该块中调用raise ActiveRecord::Rollback,以便还原事务块中对数据库的所有更改。


另一个想法是软删除EntityUser的{​​{1}}个实例,而不是实际从数据库中删除它们。有一些宝石可以帮助您使用此功能,例如 acts_as_paranoid

你会

  1. 软删除User实例
  2. 获取并构建新的EntityUser实例
  3. (可选)如果一切顺利,则从数据库中刷新软删除的实例
  4. 如果使用此方法出现问题,则可以轻松取消删除软删除的记录。