Добавление и удаление из отношения has_many: through - PullRequest
5 голосов
/ 11 декабря 2010

Из руководства по ассоциациям Rails они демонстрируют отношение многие ко многим, используя has_many: through, вот так:

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

Как мне создавать и удалять встречи?

Если у меня есть @physician, я напишу что-то вроде следующего для создания встречи?

@patient = @physician.patients.new params[:patient]
@physician.patients << @patient
@patient.save # Is this line needed?

А как насчет кода для удаления или уничтожения? Кроме того, если пациента больше не будет в таблице назначений, он будет уничтожен?

1 Ответ

7 голосов
/ 11 декабря 2010

В вашем коде создания встречи вторая строка не нужна, и вместо #new:

используется метод #build
@patient = @physician.patients.build params[:patient]
@patient.save  # yes, it worked

Для уничтожения записи о встрече вы можете просто найти и уничтожить:

@appo = @physician.appointments.find(1)
@appo.destroy

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

class Patient < ActiveRecord::Base
  has_many :appointments
  has_many :physicians, :through => :appointments, :dependency => :destroy
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...