0

这个问题一定已经被问过百万次了,但我就是找不到答案:(

假设我有 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列添加为 Country 模型的 FK,例如

class Country
  has_many :cities
  has_many :companies
end

class Company
  belongs_to :city
  belongs_to :country
end

但这看起来不是很干燥。

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

谢谢!

4

1 回答 1

1

使用has_many through关联。

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

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

于 2012-11-13T12:37:29.760 回答