如何在依赖rails的destroy中避免N+1查询


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_destroyafter_destroy回调都不会被调用,因为不会调用destroy方法。

如果你使用Postgres,你需要在你的源迁移中通过外键上的级联标志,这样才能使工作

add_foreign_key :some_table, :related_table, on_delete: cascade

最新更新