2017-01-19 4 views
0

私のTrack.rbモデルには次のコードがあります。より多くのRails構文を使用してこれを書く方法はありますか? 3.2このSQLクエリをRails 3.2の構文で書くにはどうすればよいですか?

@track = Track.find(7) 


Submission.joins("LEFT JOIN missions ON missions.id = submissions.mission_id") 
      .joins("LEFT JOIN tracks ON tracks.id = missions.track_id") 
      .where("missions.track_id = ?", track.id) 

モデルのRailsを使用してイム:すべての

Track.rb 
    has_many :missions 

Mission.rb 
    belongs_to :track 
    has_many :submissions 

Submission.rb 
    belongs_to :mission 
+0

?そうであれば、「含む」が行く方法です。 – tadman

+0

私のすべてのモデルは正しく設定されています –

+0

もしそうなら、あなたは必要なデータをeager-loadingすることによってそれらの 'belongs_to'タイプの関係を行使することができます。 'インクルード'は、何が関わっているのかを再定義することなく、ジョインを追加するという効果があります。少し試して、それが生成するクエリを見てください。最初に 'has_many:mission、through:tracks'などを設定して適切な関係を作ることもできます。 – tadman

答えて

1

まず、あなたが本当にmissionsのために参加し、左必要がありますか? missions.track_idでフィルタリングするので、ミッションなしで投稿する必要はありません。この場合、内部結合がより適切です。

次に、tracksに参加する必要があります。このテーブルは次のsqlで使用しないでください。これらの考えで

、あなたはあなたのようコードを書き換えることができます:あなたはこれらのモデル間の関係を持っていますか

Submission.joins(:mission).where(missions: { track_id: track.id }) 
+0

それは完璧な、素晴らしい仕事! –

関連する問題