¿Hay alguna forma de comprobar, dentro de un gancho before_destroy
, qué objeto (clase) se llama destroy
?has_many a través de la asociación dependiente destruir bajo condición de quién llamó destroy
En el siguiente ejemplo, cuando se destruye un patient
, también lo es su appointments
(que es lo que quiero); sin embargo, no quiero permitir que se destruya physician
si hay algún appointments
asociado con ese physician
.
De nuevo, ¿hay alguna manera de hacer tal control en la devolución de llamada before_destory
? Si no, ¿hay alguna otra manera de lograr este "control de destrucción" basado en la "dirección" de la llamada (es decir, según quién llamó)?
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
[ ': restrict' está desfasada] (https://github.com/rails/rails/commit/5ad79989ef0a015fd22cfed90b2e8a56881e6c36#diff-5870816b49b90e43340607bb11ed2514R91) Ago 10 de 2012 en una rama destinada a' 4'rieles. [La guía * basic * de la asociación también se actualizó] (https://github.com/rails/rails/commit/a63fc94aa3689f1e781ac51411ec79a81c011d8a). ': restrict_with_exception' proporciona la misma funcionalidad que': restrict'; también hay otra opción similar, ': restrict_with_error', que causa que se agregue un error al propietario si hay un objeto asociado. – user664833