0

Rails2.3アプリに複雑なDBスキーマがあります。ある時点で、複数のテーブルを結合して複数の列からデータを取得するためのクエリを作成する必要があります。必要なデータを取得するために常に確認する必要があるテーブルがあります。

Rails構文を使用して結合しようとすると、問題が発生します。レールが同じテーブルに何度も参加することをスキップさせる方法が見つかりませんでした。

私がこのテーブルの関係を持っているとしましょう:

A=>B=>C=>D=>E=>F
A=>B=>F=>G
A=>B=>F=>H
A=>I

ご覧のとおり、Bは、必要なテーブルにアクセスするために何度か「参加」するテーブルです。

私のクエリは次のようになります。

A.all( :select=>"SOME DATA FROM F, G, H AND I",
       :joins=>[{{{{:B=>:C}=>:D}=>:E}=>:F}, {{:B=>:F}=>:G}, {{:B=>:F}=>:H}, :I],
       :conditions=>{"SOME CONDITIONS"
                    }
     )

ハッシュ構文を使用して結合を指定していることがわかります。

問題は、railsが作成する結合を見ると、Bに3回結合していることがわかります。一度だけやってそこから行けば賢いのではないかと思いますが、何度か参加したい場合もあると思います。

私の質問は、rails 2.3.8構文を使用して、結果のクエリがBに1回だけ結合するようにするにはどうすればよいかということです。タイプ:belongs_to:througのモデルに追加の関係を追加することは、私にとってオプションではありません

4

1 に答える 1

2

試す

A.all(:joins => [:I, { :B => [{ :F => [:G, :H] }, {:C => { :D => { :E => :F }}}]}])
于 2013-02-07T00:28:43.563 に答える