2012-03-25 89 views
5

我想提出一些疑問,就像這樣:查詢通過協會 - 的Rails 3

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

我的意思是,我需要訪問是通過關聯的另一示範田。

在此先感謝

回答

18

假設一個公司可以有多個地址(這我假設,因爲你company.address.city命名空間的,因爲它使一個有趣的查詢示例):

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 

你要找的查詢將如下所示:

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

注意,在該協會的複數形式上面的where子句中總是使用。 where子句中的鍵指的是表名,而不是關聯名。