Rails - AciveRecord использовать: зависимый =>: уничтожить при условии - PullRequest
19 голосов
/ 18 мая 2011

Какой будет лучший / СУХОЙ способ уничтожить все зависимости объекта на основе условия.?

Пример:

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 Ответ

35 голосов
/ 18 мая 2011

Нет. Вы должны удалить :dependent => :destroy и добавить after_destroy callback, где вы можете написать любую логику, какую захотите.

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 
...