我正在使用Rails 3.0.10。 Building
has_many Floors
和Floor
has_many Suites
。我想用至少一个Buildings
获取所有Suite
。 (并非每个建筑都有套房;例如,有些建筑仍在建设中。)
一些警告:
我只想要唯一的记录,所以像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核心的任何其他语义,最好的方法是什么?我想出了几种不同的方法,但我不确定什么是最规范的。
答案 0 :(得分:1)
使用3个Sql-Queries:
Building.where(:id => Floor.where(:id => Suite.all.collect(&:floor_id).uniq).collect(&:building_id))