Я использую Rails 3.0.10.A Building
has_many Floors
и Floor
has_many Suites
.Я хотел бы получить все Buildings
хотя бы с одним Suite
.(Не в каждом здании есть свиты; например, некоторые еще находятся в процессе строительства.)
Некоторые предостережения:
Я хочу только уникальные записи, поэтому что-то вродеBuilding.joins(:floors, :suites)
не работает.
Есть много зданий.Я не хочу возвращать огромную коллекцию локально, а затем #uniq
it.
Я бы предпочел избегать ссылок на строки, где это возможно.Например, я не хочу делать что-то вроде 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?Я придумал несколько разных способов сделать это, но я не уверен, что является наиболее каноническим.