特定のモデルからシンボル化されたディープ アソシエーションを取得するユース ケースがあり、外部結合を使用する特定のクエリを実行する必要があります。完全な SQL を手で書くことに頼らずに、どうすればそれを行うことができるでしょうか?
私が望まない答え: 'その副作用は必要ありません) - SQL を自分で記述します (申し訳ありませんが、2013 年です。クロスデータベースのサポートなど...、フェッチするオブジェクトは read_only であり、さらに副作用があります)
私はArelソリューションが欲しいです。モデルの arel_table を使用して SQL 式を構築できることはわかっていますが、結合用の DSL もありますが、モデルの結合メソッドでそれを使用することはできません。
car = Car.arel_table
engine = Engine.arel_table
eng_exp = car.join(engine).on(car[:engine_id].eq(engine[:id]))
eng_exp.to_sql #=> GOOD! very nice!
Car.joins(eng_exp) #=> Breaks!!
なぜこれがうまくいかないのかは私を超えています。何が欠けているのか正確にはわかりません。しかし、それは私が今持っている解決策に最も近いものです。誰かが私の例を完成させるのを手伝ってくれたり、素敵な回避策を提供してくれたり、Rails がそのような明らかに必要な機能をいつ搭載するのか教えてくれたりしたら、永遠に感謝します。