如何避免 rails dependent destroy 中的 N+1 查询?

How to avoid N+1 queries in rails dependent destroy?

Class User < ActiveRecord::Base
  has_many :posts, dependent: :destroy
end

Class Post < ActiveRecord::Base
  belongs_to :user
end

当拥有 N 个帖子的用户被销毁时,N+1 个查询将 运行 销毁关联的帖子和用户。在这种情况下如何避免预先加载?

您可以使用

dependent: delete_all

创建一个 SQL 查询来删除相关记录,但是任何 before_destroy after_destroy 回调都不会被调用,因为没有 destroy 方法会被调用打电话。

如果您使用的是 Postgres,则需要在外键上的原始迁移中传递级联标志才能正常工作

add_foreign_key :some_table, :related_table, on_delete: cascade