有沒有辦法在before_destroy
鉤子內檢查什麼對象(類)叫做destroy
?has_many通過關聯依賴destroy在誰被調用destroy的情況下
在下面的例子中,當一個patient
被銷燬時,他們的appointments
(這是我想要的)也是如此。但是我不想讓physician
被銷燬,如果有任何appointments
與physician
相關聯。
同樣,有沒有辦法在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
[':restrict'被廢棄(https://github.com/rails/rails/commit/5ad79989ef0a015fd22cfed90b2e8a56881e6c36#diff-5870816b49b90e43340607bb11ed2514R91)2012年8月10日在去往'的Rails 4'一個分支。 [*關聯基礎知識*指南也進行了更新](https://github.com/rails/rails/commit/a63fc94aa3689f1e781ac51411ec79a81c011d8a)。 ':restrict_with_exception'提供與':restrict'相同的功能;還有另外一個類似的選項':restrict_with_error',如果有關聯的對象會導致錯誤被添加到所有者。 – user664833 2014-03-21 23:47:07