Как сделать рубин на рельсах

http://guides.rubyonrails.org/association_basics.html

На основе приведенного выше примера я создал:

class Physician < ActiveRecord::Base
  has_many :appointments
  has_many :patients, through: :appointments
end

class Appointment < ActiveRecord::Base
  belongs_to :physician
  belongs_to :patient
end

class Patient < ActiveRecord::Base
  has_many :appointments
  has_many :physicians, through: :appointments
end

Кто-нибудь может подсказать мне, как я могу выполнить каскадное удаление.

  1. если я удаляю пациента, я хочу удалить все встречи для пациента. Нужно ли где-нибудь использовать зависимое ключевое слово? Может кто-нибудь продемонстрировать, как это решить.

  2. Как удалить все встречи для конкретного пациента?

Заранее спасибо!

1 ответ

class Patient < ActiveRecord::Base
  has_many :appointments, dependent: :destroy
  has_many :physicians, through: :appointments
end

Patient.find(id).destroy

Это должно работать для вас. Убедитесь, что вы используете destroy и не delete потому что если вы используете delete, вы не получите ожидаемого каскадного эффекта.

Обновление 2:

Если вы хотите уничтожить все встречи, но не пациента, вы можете сделать это:

Patient.find(id).appointments.destroy_all

Другие вопросы по тегам