has_many par l'association dépendant de la détruire en vertu de la condition de l'oms a appelé à détruire

Est-il un moyen de vérifier, à l'intérieur d'un before_destroy crochet, quel objet (classe) a appelé destroy?

Dans l'exemple suivant, lorsqu'un patient est détruit, leurs appointments (qui est ce que je veux), mais je ne veux pas permettre à un physician être détruit s'il y a des appointments associés à ce physician.

Encore une fois, est-il un moyen de faire un tel contrôle dans le before_destory de rappel? Si non, est-il un autre moyen de réaliser cette "destruction cochez la case" basé sur la "direction" de l'appel (c'est à dire basée sur la personne qui appelle)?

class Physician < ActiveRecord::Base
  has_many :appointments, dependent: :destroy
  has_many :patients, through: :appointments
end


class Patient < ActiveRecord::Base
  has_many :appointments, dependent: :destroy
  has_many :physicians, through: :appointments
end


class Appointment < ActiveRecord::Base
  belongs_to :patient
  belongs_to :physician

  before_destroy :ensure_not_referenced_by_anything_important

  private

  def ensure_not_referenced_by_anything_important
    unless patients.empty?
      errors.add(:base, 'This physician cannot be deleted because appointments exist.')
      false
    end
  end
end
InformationsquelleAutor user664833 | 2012-04-06