【发布时间】:2020-02-03 09:14:51
【问题描述】:
我有很多数据要删除,因此我使用 delete/delete_all 而不是 destroy,通过外键上的级联 (on_delete: :cascade)。
我想删除一个父活动记录,该记录有几个“子表”和很多行。其中一些子表也有几个子表。出于这个原因,我在外键上添加了级联,这样我只需要调用 parent.delete 即可触发删除父级的所有子级和孙级。
我想将 delete/delete_all 与活动记录批次组合https://api.rubyonrails.org/classes/ActiveRecord/Batches.html,但由于只有一个单亲,我不知道如何以一种简洁的方式组合批次和级联删除。
一种选择是显式批量删除孩子和孙子,例如
parent.children_x.find_each do |child_x|
child_x.grand_children_y.in_batches do |grand_child_y_batch|
grand_child_y_batch.delete_all
end
child_x.delete
end
parent.children_z.in_batches do |child_batch|
child_batch.delete_all
end
...etc...
但如果有一种更隐含的方式允许我只在父级上调用 delete 并批量删除子级和孙子级,那将是可取的,例如
parent.cascade_in_batches do |parent_batch|
parent_batch.delete_all #This batch deletes all children and grand children
end
我看到父级上没有in_batches,因为父级只是一个实体,所以看起来只有像上面第一个示例那样分批显式删除才有可能?
谢谢,
-露易丝
【问题讨论】:
标签: ruby-on-rails rails-activerecord cascade