mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
4cf7559280
Sometimes cascading association deletions can cause timeouts due to an IO issue. Perhaps a model has associations that are destroyed on deletion which in turn trigger other deletions and this can continue down a complex tree. Along this tree you may also hit other IO operations. Such deep deletions can lead to server timeouts while awaiting completion and really the user may not notice all the changes on their side immediately making them wait unnecesarially or worse causing a timeout during the operation. We now allow associations supporting the `dependent:` key to take `:destroy_async`, which schedules a background job to destroy associations. Co-authored-by: Adrianna Chang <adrianna.chang@shopify.com> Co-authored-by: Rafael Mendonça França <rafael@franca.dev> Co-authored-by: Cory Gwin @gwincr11 <gwincr11@github.com>
15 lines
649 B
Ruby
15 lines
649 B
Ruby
# frozen_string_literal: true
|
|
|
|
class DestroyAsyncParent < ActiveRecord::Base
|
|
self.primary_key = "parent_id"
|
|
|
|
has_one :dl_keyed_has_one, dependent: :destroy_async,
|
|
foreign_key: :destroy_async_parent_id, primary_key: :parent_id
|
|
has_many :dl_keyed_has_many, dependent: :destroy_async,
|
|
foreign_key: :many_key, primary_key: :parent_id
|
|
has_many :dl_keyed_join, dependent: :destroy_async,
|
|
foreign_key: :destroy_async_parent_id, primary_key: :joins_key
|
|
has_many :dl_keyed_has_many_through,
|
|
through: :dl_keyed_join, dependent: :destroy_async,
|
|
foreign_key: :dl_has_many_through_key_id, primary_key: :through_key
|
|
end
|