获取对象列表,然后添加更多对象

时间:2012-01-26 02:20:42

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

我有一个静态建筑列表,我只需要通过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循环?

2 个答案:

答案 0 :(得分:0)

Building.include({:city_building => [:city]})。where('cities.name =?','Foo')。all

更新:注意,我在第一条评论解释了我没有意识到的要求是初始请求的一部分之后更新了上述答案。

这样做是你做的吗?

答案 1 :(得分:-1)

好的,我自己找到了解决方案,我想这会对一些人有帮助,所以我在这里写一下:

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