Có cách nào để kiểm tra, trong móc before_destroy
, đối tượng (lớp) nào được gọi là destroy
?has_many thông qua hủy diệt phụ thuộc vào hiệp hội trong điều kiện ai được gọi là hủy
Trong ví dụ sau, khi patient
bị hủy, vậy hãy là appointments
(đó là điều tôi muốn); tuy nhiên tôi không muốn cho phép physician
bị hủy nếu có bất kỳ appointments
nào được liên kết với số physician
đó.
Một lần nữa, có cách nào để thực hiện việc kiểm tra như vậy trong số gọi lại before_destory
không? Nếu không, có cách nào khác để thực hiện "kiểm tra hủy diệt" này dựa trên "hướng" của cuộc gọi (tức là dựa trên người được gọi) không?
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' không được dùng nữa] (https://github.com/rails/rails/commit/5ad79989ef0a015fd22cfed90b2e8a56881e6c36#diff-5870816b49b90e43340607bb11ed2514R91) Ngày 10 tháng 8 năm 2012 trong một chi nhánh được đặt cho' Rails 4'. [Hướng dẫn * khái niệm cơ bản về hiệp hội cũng đã được cập nhật] (https://github.com/rails/rails/commit/a63fc94aa3689f1e781ac51411ec79a81c011d8a). ': restrict_with_exception' cung cấp cùng chức năng như': limits' đã làm; cũng có một tùy chọn tương tự khác, ': restrict_with_error', làm cho lỗi được thêm vào chủ sở hữu nếu có một đối tượng liên kết. – user664833