C'è un modo per verificare, all'interno di un hook before_destroy
, quale oggetto (classe) chiama destroy
?has_many tramite associazione dipendente da distruzione in condizione di chi ha chiamato destroy
Nell'esempio seguente, quando un patient
viene eliminato, lo stesso vale per appointments
(che è ciò che desidero); tuttavia non voglio permettere che un physician
venga distrutto se ci sono appointments
associati a quello physician
.
Ancora, c'è un modo per effettuare tale controllo nella richiamata before_destory
? In caso contrario, esiste un altro modo per eseguire questo "controllo di distruzione" in base alla "direzione" della chiamata (in base a chi ha chiamato)?
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' è stata sconsigliata] (https://github.com/rails/rails/commit/5ad79989ef0a015fd22cfed90b2e8a56881e6c36#diff-5870816b49b90e43340607bb11ed2514R91) 10 AGOSTO 2012 in un ramo destinato a' 4' Rails. [Anche la guida * sulle basi dell'associazione * è stata aggiornata] (https://github.com/rails/rails/commit/a63fc94aa3689f1e781ac51411ec79a81c011d8a). ': restrict_with_exception' fornisce la stessa funzionalità di': restrict'; c'è anche un'altra opzione simile, ': restrict_with_error', che fa sì che venga aggiunto un errore al proprietario se c'è un oggetto associato. – user664833