私はRails 3.0.10を使用しています。 Building
has_many Floors
およびFloor
has_many Suites
である。少なくとも1つのSuite
を持つBuildings
をすべて取得したいと思います。 (必ずしもすべての建物はそれでスイートルームがあり、一部には、例えば、まだ建設中です。)Railsで異なる結合レコードをフェッチするにはどうすればよいですか?
いくつかの注意点:Building.joins(:floors, :suites)
ような何かがうまくいかないよう
私は、ユニークなレコードをしたいです。
多くの建物があります。私は地元の巨大なコレクションを持ち帰りたくないのですが、その後は
#uniq
です。可能であれば、文字列参照を避けることをお勧めします。たとえば、私は
Building.joins(:floors, :suites).select("distinct buildings.id")
のようなことをしたくありません。これは、
select distinct buildings.id from buildings inner join floors on floors.building_id = buildings.id inner join suites on suites.floor_id;
のような単一のSQLクエリで実行できます。したがって、このアプローチでも1つのクエリだけが必要な場合は最適です。
これは、ActiveRecord/ARel/Railsコアを使用する他のセマンティックを使用してどのようにするのが最適でしょうか?私はこれを行ういくつかの異なる方法を思いついたが、私は何が最も標準的であるか分からない。 3 SQL-クエリで
あなたはメモリにすべての 'Floor'内のすべての' Suite'をロードするためIMO、これは良い方法ではありません。それは不必要にインスタンス化されたオブジェクトの多くです!ここでは建物だけを取りに行きたいと思っています。 –
フロアにcounter_cachesを追加すると、2つのSQLクエリだけが必要になります。 – Lichtamberg
これは、上記の条件のうちの1つを破るRailsコアに固執しません。また、SQLが比較的簡単な文でそれを行うことができるならば、Railsも同様にできるはずだと感じます。 –