Rails - 一次更新数百个字段,捕获事务失败,返回错误但保留成功的事务

日本强盗

我的用例 - 我有来自包含唯一 ID 的客户端的数据。我想使用这些 id 在服务器上找到它们的等价物(例如,我有 Object.find_by(client_id: [ids 数组])。到目前为止,没问题。

但是,实际上我必须一次定期更新数百个对象,并确保它们通过验证。我想做什么:

使用上面的方法从服务器检索一堆对象。使用传入的参数(如果 client_id 匹配检索的_object_id,更新所有属性!)验证新对象。任何未通过验证的对象都会放入错误块中。其余的,包装在一个事务中并发送一个 sql 语句。

所以,我已经学会了如何执行 update_attributes!,这很棒,因为它在抛出错误时给了我验证反馈。但是,我必须访问数据库,捕获错误,然后重复数百次,这确实不能很好地扩展。

我知道事务块可以进行单个 sql 提交,但是如果我有 399 个有效对象和 1 个无效对象,则整个事情都会回滚。

这里的最佳做法是什么?我错过了什么吗?

气体

我不知道这是否正是您要查找的内容,但也许您可以使用 过滤对象@your_object.valid?,然后仅使用事务块内的有效对象。

请注意,YourModel.find_each如果您有大量记录,您可能希望在此块中查找记录并执行整个操作,以防止内存不足(尽管这意味着多次提交)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章