2013-03-26 13 views
7

Masz pewne problemy z zapytaniem has_many through.Szyny has_many poprzez zapytanie w zależności od atrybutu tabeli przelotowej

Korzystanie z przykładem: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

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 

tabela Powołanie zawiera kolumnę o nazwie appointment_date

Jak dostanę wszystkich pacjentów z konkretnego lekarza, że ​​umówiony na dany dzień ?

Odpowiedz

13
Patient.includes(:physicians, :appointments).where('physicians.id = ? AND appointments.appointment_date = ?', <id or ids array>, Date.today) 

Gdzie Date.today można zmienić za pomocą czegokolwiek, a pysician jest określony przez identyfikator lub tablicę identyfikatorów.

Można również zrobić:

physician = Physician.find(id) 
patients = physician.patients.includes(:appointments).where('appointments.appointment_date = ?', some_date) 

Edit:

w szynach 4 i przekazania, trzeba dodać references(:appointments) do zapytania w celu wykorzystania terminów w klauzuli WHERE.

+1

Świetnie! Dziękuję bardzo. – Ghar

+1

to nie działa dla mnie na szynach 4, spędziłem sporo czasu na poszukiwaniu i znalazłem [to rozwiązanie] (http://stackoverflow.com/questions/18799934/has-many-through-how-do-you -access-join-table-attributes) dla szyn 4: –

+1

Tak, w szynach 4 musisz użyć 'reference' do odniesienia nazw tabel z włączeń. – spullen

Powiązane problemy