1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/models/destroy_async_parent.rb
George Claghorn 4cf7559280 Destroy associations in a background job.
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>
2020-09-24 14:24:15 -04:00

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