2011-11-12 4 views
1

私は3つのモデル "コーチ"、 "チーム"、 "イベント"を持っていますActiveRecord:外部キーに対してネストされたクエリを実行する方法は?

イベントにはチームに属しているアトリビュートaway_teamとhome_teamがあります。チームはコーチに属し、コーチは多くのチームを持つことができます。

私がしたいことは、home_teamが特定のコーチによってコーチされていないすべてのイベントを見つけることです。したがって、次の行に沿った何か:

Event.where("home_team.team.coach_id NOT ?", coach.id) 

問題は、その構文を書き込む方法を考え出すことです。私は "チーム"モデルを含める必要があると推測していますが、特定の外部キーを介して結合するactiverecordインクルードの記述方法がわかりません。

要するに、SQLエラー(今夜は数え切れませんでした)を取得せずにこれを行う方法に関するアイデアは非常に高く評価されます。

乾杯。

答えて

1

私が正しくあなたを理解していれば、あなたは、SQLのこの種の必要がありますので、レールに、それはそのような何かに見えるはずです

SELECT events.* FROM events JOIN team on events.home_team_id = teams.id WHERE teams.coach_id != coach_id 

を:もちろん

Event.joins("join teams on events.home_team_id = teams.id").where("teams.coach_id != ?", coach_id) 

を私はあなたの正確なテーブルを知りませんこのソリューションを問題に適合させる必要があります。

あなたは、イベントモデルの関連を持っている場合:belogns_to:(:HOME_TEAM).where(....)

HOME_TEAM、あなただけの加入を使用することができます
関連する問題