Rails'嵌套'关联搜索

时间:2012-11-13 12:31:55

标签: ruby ruby-on-rails-3

这个问题肯定已被问过几百万次,但我找不到答案:(

假设我有3个型号:

class Country
  has_many :cities
end

class City
  has_many :companies
end

class Company
  belongs_to :city
end

我可以通过City.first.companies获取指定城市中的公司,但我希望能够获取指定国家/地区的所有公司,例如Country.first.companies

我能够实现的是在Country模型中编写方法:

 def companies
   @companies = []
   cities.all.each{ |c| @companies << c.companies unless c.companies.empty? }
   @companies
 end

但它返回Company对象数组的数组。我本可以将country_id列添加为国家/地区模型的FK,例如

class Country
  has_many :cities
  has_many :companies
end

class Company
  belongs_to :city
  belongs_to :country
end

但这看起来不太干。

我想收到给定国家/地区的公司对象数组。我很确定有一种Rails方法可以实现这一点。会是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用has_many through关联。

class Country
  has_many :companies, :through => :cities

现在您可以使用Country.last.companies