【发布时间】:2014-05-06 00:14:43
【问题描述】:
Ruby on Rails 的 ActiveRecord 的 destroy_all 方法为每条记录生成一个 SQL DELETE 查询。我们在 Web 应用程序中有一个页面,允许用户删除关联的记录。由于deleted_at 时间戳相差几微秒,因此对同时删除的所有记录进行分组变得具有挑战性。以下是一些示例数据:
id | deleted_at
----+----------------------------
71 |
45 | 2014-04-29 18:35:00.676153
46 | 2014-04-29 18:35:00.685657
47 | 2014-04-30 21:11:00.73096
48 | 2014-04-30 21:11:00.738533
49 | 2014-04-30 21:11:00.745232
50 |
51 |
(8 rows)
因此您可以看到这里有两个事件,一个影响 2 行(id 为 45 和 46),一个影响 3 行(id 为 47、48 和 49)。我的问题是如何查询此表,以便将每个事件分组为一行?我考虑过使用extract(microseconds from r.deleted_at),但如果秒数被包装,那将失败。我想要一个查询,甚至是一个函数,它可以比较每条记录并将具有deleted_at 的记录分组在一定的阈值内。
编辑:我应该提到我不能使用delete_all,因为我想要运行回调。我们正在使用paranoia gem 软删除记录。
【问题讨论】:
标签: sql ruby-on-rails postgresql