与has_many达到二级关联

时间:2012-11-18 20:16:35

标签: ruby-on-rails ruby ruby-on-rails-3

想象一下,你有三个模特

Class Garage
  has_many :drivers
end

Class Driver
  belongs_to :garage
  has_many :cars
end

Class Car
  belongs_to :driver
end

这一切都很好。

现在,如果我想在has_manyGarage之间添加Car关联,以便我可以直接garage.cars而无需添加新的garage_id密钥到Car模型?

我目前正在使用cars模型中定义的Garage函数:

def cars
  drivers.map{ |driver| driver.cars }.flatten
end

但这并不令人满意,因为此函数返回一个数组而不是一个代理,因此我不能在返回的汽车上使用命名范围。 此外,它在查询方面是次优的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

class Garage
  has_many :drivers
  has_many :cars, :through => :drivers
end

记录here