mysql - 如何在Rails中仅从mysql的ActiveRecord集合中删除对象?

标签 mysql ruby-on-rails ruby ruby-on-rails-4 activerecord

我正在使用我创建的服务对象计算游戏玩家的每周排行榜统计数据。我所处的情况是,如果我想重做任何特定周的计算,当且仅当新统计数据成功保存时,我才想删除旧统计数据。

我的大致步骤:

  1. AR 将给定周的现有统计数据查询到变量中
  2. 运行该周的新统计数据
  3. 保存新数据,保存成功则返回
  4. 保存新数据成功后,从步骤 1 中查询的 mysql 中删除对象。

我已经尝试使用@old_data.delete_all方法,但此时只会从mysql上的ActiveRecord_Relation对象运行查询,同时也会破坏新创建的数据。我只想销毁在创建新数据之前从查询中保存的数据。

我还没有尝试过的可能解决方案:有点hacky,但通过使用任意值更新旧数据查询中所有对象的任意列来标记旧数据,并在查询中使用delete_all那个任意值...这听起来不像是一种简单的做事方式,而且它还添加了一个额外的查询。

最佳答案

您可以简单地提取旧行的 ID,然后运行新查询来删除这些行,而不是添加标志。 delete_all 方法根据定义运行一个新查询,因此没有办法卡住旧结果并直接删除它们。

如果许多字段(例如 player_idgame_id 等)每周都相同,您也可以尝试直接更新行...

关于mysql - 如何在Rails中仅从mysql的ActiveRecord集合中删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40639823/

相关文章:

ruby-on-rails - 将方法参数链接到变量

ruby - `bundle install` 由于权限被拒绝而失败

ruby-on-rails - 如何在 Ruby/Rails 中匹配和替换模板标签?

ruby-on-rails - Ruby on Rails,使用同名枚举的问题

mysql - 在MySQL,MyISAM中,是否可以将带有分区的表更改为多个硬盘驱动器?

mysql - 如何选择数据库中的下一条记录?

php - 多次插入/更新时出现唯一键异常

MySQL 1062 - key '0' 的重复条目 'PRIMARY'

sql - 如何模拟ActiveRecord Model.count.to_sql

ruby-on-rails - rails 5.1。 : cannot get JSON object from string