2011-08-11 5 views
0

私はMissions、Users、Witsというモデルを持っています。 ウィットはミッションとユーザーに属します。Railsの読み込み、インクルード、セッションの属性

すべてのミッションのリストを読み込んで、特定のユーザーのために気を配りたいと思っています。 LEFT OUTER JOINを実行し、結合に条件を追加する必要があります。ここ は現在のために働いているものです。

Mission.joins("LEFT OUTER JOIN wits ON wits.mission_id = missions.id AND wits.user_id = #{current_user.id}") 

はその後、私のリストには、私は右のユーザーに属するウィットを取得するためにmission.wits.firstを行うことができます。

しかし、これは非常にフレンドリーではありません。私はロード済みですか?条件が満たされていない場合、すべてのウィットの読み込みを避けるために属性を使用します。

もっと良い方法がありますか、うまくいけば範囲を使って仕事を終わらせることができますか?多分新しい仮想属性をMissionに追加するかもしれませんが、私は各リストのデータベースを20回呼び出すことを避けたいと思います。

更新:最後に、私は任務のリストを見たいと思いますし、各ミッションのためには、現在のユーザーのWitのステータス。私はacts_as_apiという名前の宝石を使ってJSONで私のリストのビューを作成していますが、モデル内のセッション変数にアクセスすることはできません。これが私が必要とするすべてのものをロードするコントローラから。これはあなたのために働く必要がありますあなたの助けのための

おかげ

答えて

0

なぜ

Wit.includes(:mission).where(:user_id => params[:user_id]) 

ような何かをしないこと、あなたがミッションから照会している理由がありますあなたは本当にちょうどちょうど欲しいように聞こえる?関連するミッションのリストが必要な場合は、このようなこともできる

Wit.includes(:mission).where(:user_id => params[:user_id]).select(&:mission).uniq 
+0

いいえ私は本当にミッションリストを望んでいます、私はただ見たいだけですそれぞれのミッションにはウィットが関連付けられているかどうかがあります。クエリーがある場合はステータスです。 – rnaud

0

Mission.joins(:wits).where(:wits => { :user_id => params[:user_id] }) Or 
Mission.joins(:wits).where('wits.user_id' => params[:user_id]) 
+0

いいえ、これは子ウィットがあるミッションだけを示しています。 私が使用したクエリには、WHERE条件の代わりにANDが含まれています。 (例:http://searchoracle.techtarget.com/answer/LEFT-OUTER-JOIN-with-ON-condition-or-WHERE-condition) – rnaud

関連する問題