1
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:

4

3 回答 3

5

你需要的是

像这样向您的城市类添加另一个关联子句

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

然后你可以打电话

state.zipcodes

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

于 2013-09-05T03:05:24.973 回答
0

做这个

State.first.cities.first.zipcodes

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

于 2013-09-04T22:47:06.790 回答
0

如果不使用:through,您将需要遍历每个 City 并找到其邮政编码:

State.first.cities.map(&:zipcodes)
于 2013-09-04T22:54:57.897 回答