2012-01-26 56 views
0

我有一个静态建筑物列表,我通过Building.all获取。一个城市有很多建筑物,所以我实际上希望得到所有建筑物对象的清单,并附上他们的city_building对象清单。获取对象列表,然后添加更多对象

该协会是(简单的语言):

city has_many buildings 
city has_many city_buildings(city_id,building_id) (through buildings) 

我希望得到这样的列表:

Building1 => nil (building does not exist in the city) 
Building2 => city_building1 
Building3 => city_building2 
Building4 => nil 

什么是这样做,而不必的一种有效的方式来获取所有的建筑物然后再循环每个city_building?

+0

建筑可以属于一个以上的城市?这似乎很奇怪,但如果不是,为什么has_many:通过?无论如何,我希望看到关系的另一面。 –

回答

0

好吧,我找到了解决办法我自己,我想这将有助于一些,所以我在这里写:

Building.joins("LEFT OUTER JOIN city_buildings ON city_buildings.building_id = buildings.id").includes(:city_building) 
0

Building.include({:city_building => [:城市]}),其中( 'cities.name =?', '富')中的所有

UPDATE:注意,我更新后的上面的回答第一条评论解释了一个我没有意识到的要求是最初要求的一部分)

这是否做你以后的事情?

+0

不是,这并不指定一个城市。我想要这样做,但是对于某个特定的城市。 – Spyros

+0

现在看看,我更新了它。帮帮我? –

+0

不是。这只返回city.city_buildings将返回的内容。只有那些城市拥有的建筑物,而不是所有建筑物的名单,无论城市是否拥有这些建筑物。 – Spyros

相关问题