这个问题肯定已被问过几百万次,但我找不到答案:(
假设我有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方法可以实现这一点。会是什么?
谢谢!
答案 0 :(得分:1)
使用has_many through
关联。
class Country
has_many :companies, :through => :cities
现在您可以使用Country.last.companies
。