Rails - AciveRecord use: dependent =>: уничтожить при условии
Что будет лучшим/сухим способом уничтожить всех зависимых объектов на основе состояния.
Пример:
class Worker < ActiveRecord::Base
has_many :jobs , :dependent => :destroy
has_many :coworkers , :dependent => :destroy
has_many :company_credit_cards, :dependent => :destroy
end
условие будет
по уничтожению:
if self.is_fired?
#Destroy dependants records
else
# Do not Destroy records
end
Есть ли способ использовать Proc в зависимом состоянии.
Я нашел методы для уничтожения иждивенцев по отдельности, но это не СУХИЕ и гибкие для дальнейших ассоциаций,
Примечание. Я составил пример.. не фактическая логика
Ответы
Ответ 1
Нет. Вы должны удалить :dependent => :destroy
и добавить обратный вызов after_destroy
, где вы можете написать любую логику, которую вы хотите.
class Worker < ActiveRecord::Base
has_many :jobs
has_many :coworkers
has_many :company_credit_cards
after_destroy :cleanup
private
def cleanup
if self.is_fired?
self.jobs.destroy_all
self.coworkers.destroy_all
self.company_credit_cards.destroy_all
end
end
end
Ответ 2
Этот другой способ позволяет сохранить ваши предложения dependent
:
class Worker < ActiveRecord::Base
has_many :jobs , :dependent => :destroy
has_many :coworkers , :dependent => :destroy
has_many :company_credit_cards, :dependent => :destroy
def destroy
ActiveRecord::Base.transaction do
if self.is_fired?
self.jobs.destroy_all
self.coworkers.destroy_all
self.company_credit_cards.destroy_all
end
super
end
end
end