2012-03-25 11 views
5

vorrei fare alcune domande proprio come questo:Query attraverso le associazioni - Rails 3

employees = Employee.where(:group.name => 'admin') 
employees = Employee.where(:company.address.city => 'Porto Alegre') 

Voglio dire, ho bisogno di accedere ai campi che si trovano in un altro modello tramite associazione.

Grazie in anticipo

risposta

18

assumendo una società può avere più indirizzi (che sto assumendo a causa della vostra namespacing company.address.city, e perché rende per un esempio di query interessante):

class Group < ActiveRecord::Base 
    has_many :employees 
end 

class Employee < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :company 
end 

class Company < ActiveRecord::Base 
    has_many :employees 
    has_many :addresses 
end 

class Address < ActiveRecord::Base 
    belongs_to :company 
end 

le query che stai cercando sarebbero i seguenti:

Employee. 
    joins(:group). 
    where(:groups => { :name => 'admin' }) 
Employee. 
    joins(:company => :addresses). 
    where(:addresses => { :city => 'Porto Alegre' }) 

nota che nelle clausole dove soprattutto la forma plurale dell'associazione è sempre utilizzato. Le chiavi nelle clausole where si riferiscono ai nomi delle tabelle, non al nome dell'associazione.

Problemi correlati