我正在使用Rails 3.0.10。 A Building
has_many Floors
,和Floor
has_many Suites
。我想获取至少一个Suite
的所有Buildings
。 (并不是每一个建筑物中有套房;有的还在建设中,例如。)如何在Rails中获取不同的连接记录?
一些注意事项:
我只希望唯一的记录,所以像
Building.joins(:floors, :suites)
不起作用。有很多建筑物。我不想在本地带回一个巨大的收集,然后
#uniq
它。如果可能,我宁愿避免字符串引用。例如,我不想做类似
Building.joins(:floors, :suites).select("distinct buildings.id")
的事情。这可以在单个SQL查询中完成 - 例如
select distinct buildings.id from buildings inner join floors on floors.building_id = buildings.id inner join suites on suites.floor_id;
。所以最好这种方法只需要一个查询。
使用ActiveRecord/ARel /使用Rails核心的其他语义的最佳方法是什么?我已经想出了几种不同的方式来做这件事,但我不确定什么是最经典的。
IMO,因为你在每一个'Floor'加载每个'Suite'到内存中,这是不是一个好方法。这是很多不必要的实例化对象!我们只想在这里取建筑物。 – 2011-12-19 20:21:23
添加counter_caches到你的楼层,你只需要2个sql查询..? – Lichtamberg 2011-12-19 20:24:31
这不会坚持Rails核心,这打破了我上面提到的条件之一。另外,如果SQL可以用相对简单的语句来实现,那么感觉Rails应该也可以。 – 2011-12-19 20:31:02