имеет_многие через ассоциацию, зависимую от уничтожения при условии, что кто вызвал уничтожение

Есть ли способ проверить в хуке before_destroy, какой объект (class)называется destroy?

В следующем примере, когда patientуничтожается, уничтожается и их appointments(, чего я и хочу); однако я не хочу, чтобы physicianбыл уничтожен, если с этим physicianсвязаны какие-либо appointments.

Опять же, есть ли способ сделать такую ​​проверку в обратном вызове before_destory? Если нет, есть ли другой способ выполнить эту «проверку уничтожения» на основе «направления» вызова (, т.е. на основании того, кто звонил )?

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
6
задан Kara 17 March 2014 в 18:04
поделиться