2012-03-25 21 views
5

me gustaría hacer algunas consultas al igual que este:de consulta a través de asociaciones - Rails 3

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

Es decir, yo necesito para acceder a los campos que se encuentran en otro modelo a través de la asociación.

Gracias de antemano

Respuesta

18

suponiendo que una empresa puede tener varias direcciones (que estoy suponiendo que debido a su namespacing company.address.city, y porque hace que para una consulta de ejemplo interesante):

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 

las consultas que está buscando serían los siguientes:

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

nota de que en las cláusulas anteriores donde la forma plural de la asociación se utiliza siempre. Las claves en las cláusulas where se refieren a los nombres de las tablas, no al nombre de la asociación.

Cuestiones relacionadas