从 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。
来源:
我不小心忘了打开计划任务,并在 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。
来源: