从 rails 中的某个 id 开始删除所有记录?

Remove all records from a certain id onwards in rails?

我不小心忘了打开计划任务,并在 table 中添加了不应该存在的行。

我知道要从中删除行的 ID。但是你是怎么做到的呢?

我试过了

Datum.where("id > 650").delete
ArgumentError (wrong number of arguments (given 0, expected 1))

还有

Datum.where("id > 650").destroy
Traceback (most recent call last):
        1: from (irb):5
ArgumentError (wrong number of arguments (given 0, expected 1))

似乎与 destroy_all

Datum.where("id > 650").destroy_all
  Datum Load (0.4ms)  SELECT "data".* FROM "data" WHERE (id > 650)
   (0.1ms)  BEGIN
  Datum Destroy (10.2ms)  DELETE FROM "data" WHERE "data"."id" =   [["id", 651]]
   (0.5ms)  COMMIT
   (0.1ms)  BEGIN
  Datum Destroy (0.3ms)  DELETE FROM "data" WHERE "data"."id" =   [["id", 652]]
   (0.3ms)  COMMIT
   (0.1ms)  BEGIN
  Datum Destroy (0.3ms)  DELETE FROM "data" WHERE "data"."id" =   [["id", 653]]
   (0.2ms)  COMMIT

我怀疑 destroy 不起作用,因为当有人打算删除一条记录但不小心提供了多条记录时,它可以防止发生灾难的可能性很小

首先,delete_all 与 destroy_all 进行简短比较:

  • delete_all:将直接从table中删除你的数据,而不实例化你的ActiveRecord;更快,但可能不会保存,具体取决于您的型号。
  • destroy_all:您的 ActiveRecord 将被实例化,您的回调、级联删除等将被执行。速度较慢,但​​节省。

如果你有 RecordSet,你总是需要执行 delete/destroy_all 因为方法 delete/destroy 只适用于单个 ActiveRecord。

来源: