2013-03-26 12 views
7

Avendo alcuni problemi con has_many attraverso la query.Rails ha_molto attraverso la query a seconda dell'attributo table through

Usando l'esempio qui: 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 

La tabella appuntamento ha una colonna denominata appointment_date

Come vorrei avere tutti i pazienti di un medico specifico che hanno un appuntamento a una data ?

risposta

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

Dove Date.today potrebbe essere cambiato con nulla e il pysician viene specificato da un ID o una matrice di ID.

Si potrebbe anche fare:

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

Edit:

in Rails 4 e in avanti, è necessario aggiungere references(:appointments) alla query al fine di utilizzare gli appuntamenti nella clausola dove.

+1

Ottimo! Grazie mille. – Ghar

+1

questo non ha funzionato per me su binari 4, ho passato un po 'di tempo a cercare e ho trovato [questa soluzione] (http://stackoverflow.com/questions/18799934/has-many-through-how-do-you -access-join-table-attributes) per le guide 4: –

+1

Sì, nelle guide 4 è necessario utilizzare 'riferimenti' per fare riferimento ai nomi delle tabelle da include. – spullen

Problemi correlati