Active Record has_many关系三层深吗?

时间:2013-09-04 22:36:52

标签: ruby-on-rails activerecord

class State < ActiveRecord::Base
  has_many :cities
end

class City < ActiveRecord::Base
  has_many :zipcodes
  belongs_to :state
end

class Zipcode < ActiveRecord::Base
  belongs_to :city
end

当我尝试做的时候:

State.first.cities.zipcodes

我收到ActiveRecord::Associations::CollectionProxy错误。

有没有人知道如何使用has_many关系深入多个级别?我确实使用through:选项让这个工作正常,但无论如何都不使用through:选项吗?

3 个答案:

答案 0 :(得分:5)

您需要的是

为您的城市类添加另一个关联子句,如此

class State < ActiveRecord::Base
  has_many :cities
  has_many :zipcodes, through: :cities 
end

然后你可以打电话

state.zipcodes

将返回给定州的所有邮政编码(通过关联城市)

答案 1 :(得分:0)

这样做

State.first.cities.first.zipcodes

这是因为State.first.cities返回一个集合,因为它是州与城市之间的has_many关系

答案 2 :(得分:0)

不使用:through,您需要遍历每个城市并找到其邮政编码:

State.first.cities.map(&:zipcodes)