Pav*_*hra 5 performance ruby-on-rails associations eager-loading destroy
Class User < ActiveRecord::Base
has_many :posts, dependent: :destroy
end
Class Post < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
当拥有 N 个帖子的用户被销毁时,将运行 N+1 个查询来销毁关联的帖子和用户。在这种情况下如何避免急切加载?
您可以使用
dependent: delete_all
Run Code Online (Sandbox Code Playgroud)
它创建一个 SQL 查询来删除关联的记录,但before_destroy after_destroy不会调用任何回调,因为destroy不会调用任何方法。
如果您使用的是 Postgres,则需要在外键上的原始迁移中传递级联标志才能正常工作
add_foreign_key :some_table, :related_table, on_delete: cascade
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |