如何在Rails中获取不同的连接记录?

时间:2011-12-19 19:44:50

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

我正在使用Rails 3.0.10。 Building has_many FloorsFloor 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核心的任何其他语义,最好的方法是什么?我想出了几种不同的方法,但我不确定什么是最规范的。

1 个答案:

答案 0 :(得分:1)

使用3个Sql-Queries:

Building.where(:id => Floor.where(:id => Suite.all.collect(&:floor_id).uniq).collect(&:building_id))