Как получить доступ к атрибутам модели соединения в has_many: через ассоциацию - PullRequest
0 голосов
/ 25 октября 2011

Используя пример на направляющих рельсов :

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

Скажите, Appointment имеет атрибут exam_room_id.Я хочу использовать ActiveRecord для получения набора результатов, который содержит Physician's Patients и в какой комнате экзамена находится Patient.

Мне кажется, что я должен быть в состоянии сделать что-то вроде этого:

Physician.first.patients.each do |patient|
  patient.appointment.exam_room_id    
end

Это не работает, потому что Physician has_many :appointments (то есть: ни одной встречи).

Существует ли элегантный «рельсовый способ» доступа к атрибутам Appointment вместе спо обе стороны от has_many :through?

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Мы можем сделать следующее, потому что таблица встреч включается в запрос соединения неявно,

Physician.first.patients.select("appointments.exam_room_id ")
   .each{|patient| patient.exam_root_id}
0 голосов
/ 25 октября 2011

Вам придется проходить через каждый прием.

Physician.first.patients.each do |patient|
  patient.appointments.each {|appointment| puts appointment.exam_room_id}
end

Это будет показывать вам каждую комнату для осмотра, в которой когда-либо находился пациент (в зависимости от его назначений).Я не думаю, что это именно то, что вы ищете, но хотел бы проиллюстрировать, что вам нужно повторять каждый прием к врачу или пациенту, чтобы получить room_id.

Если вам нужен результирующий набор текущих комнат, высобираюсь хотеть пройти назначения.Physician.first.appointments.each.Кроме того, как вы отличаете текущие и прошлые назначения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...