我正在使用我创建的服务对象计算游戏玩家的每周排行榜统计数据。我所处的情况是,如果我想重做任何特定周的计算,当且仅当新统计数据成功保存时,我才想删除旧统计数据。
我的大致步骤:
- AR 将给定周的现有统计数据查询到变量中
- 运行该周的新统计数据
- 保存新数据,保存成功则返回
- 保存新数据成功后,从步骤 1 中查询的 mysql 中删除对象。
我已经尝试使用@old_data.delete_all
方法,但此时只会从mysql上的ActiveRecord_Relation对象运行查询,同时也会破坏新创建的数据。我只想销毁在创建新数据之前从查询中保存的数据。
我还没有尝试过的可能解决方案:有点hacky,但通过使用任意值更新旧数据查询中所有对象的任意列来标记旧数据,并在查询中使用delete_all
那个任意值...这听起来不像是一种简单的做事方式,而且它还添加了一个额外的查询。
最佳答案
您可以简单地提取
旧行的 ID,然后运行新查询来删除这些行,而不是添加标志。 delete_all
方法根据定义运行一个新查询,因此没有办法卡住旧结果并直接删除它们。
如果许多字段(例如 player_id
和 game_id
等)每周都相同,您也可以尝试直接更新行...
关于mysql - 如何在Rails中仅从mysql的ActiveRecord集合中删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40639823/