我正在开发一个Rails应用程序,该应用程序具有更新某些用户信息的后台进程。为此,此方法必须删除所有现有信息(存储在另一个表中)并从Internet获取新信息。问题是,如果在中期出现问题,用户在流程再次运行之前就没有信息。
有一些事情要做:
transaction = EntityUser.delete_all(:user_id => @current_user.id)
#instructions that adds new entity
...
...
transaction.commit
任何人都可以建议我可以做些什么来避免这种问题吗?
谢谢
答案 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
。
你会
User
实例EntityUser
实例如果使用此方法出现问题,则可以轻松取消删除软删除的记录。