如何避免依赖Rails的销毁中的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_destroy after_destroy回调,因为不会调用任何destroy方法。

如果您使用的是Postgres,则需要在外键上的原始迁移中传递级联标志,以使其起作用

add_foreign_key :some_table,:related_table,on_delete: cascade

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...