2012-02-23 8 views
0

私は本質的にデータを複製する2つのモデル/コントローラを別のページに持っています。私は、コントローラの1にコレクションを反復処理するとき、それは意図したとおり、私は他のコントローラ上の部分を通じて収集を実行したときだけ、しかし、それは別の「オブジェクト」アイテムのコレクションにレールを部分的にレンダリングする

def show (users_controller.rb) 
    ... 
    @missions = @user.missions 
    @mission = current_user.missions.build 
    ... 
end 


def index (missions_controller.rb) 
    ... 
    @missions = @user.missions 
    @mission = current_user.missions.build 
    ... 
end 

私はrender @missionsを呼び出す(作成働きますapp/views/missions/_mission.html.erb)をshow.html.erbindex.html.erbの両方のファイルに追加します。 Users_controllerで意図したとおりに動作しますが、Missions_controllerに余分な「オブジェクト」を作成します。コレクションをレンダリングするとき、コントローラー内の変数@mission@missionsの両方をレンダリングしているようです。

なぜこれを解決できますか?私は部分を共有ビューディレクトリに移動しようとしましたが、問題は残ります。私はインスタンス変数に名前を付けた方法と関係があると仮定しています。私は大変です。ありがとうございました

答えて

1

これはちょうど推測ですが、あなたが構築しているミッションが@ user.missionsに含まれているため、これは起こりそうです。 Criteriaは、実際に使用されるまで評価されません(.allまたは.eachなどを呼び出すことによって)ので、current_user.missions.buildを使用して、@ user.missionsの最後に空の任務を追加します。 current_userと@userは同じです。

これを修正するには、@missions = @user.missions.allへの呼び出しを変更します。これにより、ビルドされたミッションが最後に追加される前に、すぐに評価されます。

私が言ったように、ちょうど推測!

+0

うわー、それは魅力的でした!私はまだ確信していません。 Hm。それは '@ missions'という呼び出しがmissions_controllerから来ているという事実と関係がありますか?なぜこのコレクションへの呼び出しに '@ mission'という変数が含まれているのか混乱しています。 – pruett

+0

user.missionsは実際に使用されるまで評価されません。データを要求するメソッドが呼び出された後にのみ評価されるアソシエーションプロキシを返します。ですから、あなたが@ user.missionsと言うとき、あなたは「将来のある時点で、このユーザに関連するすべての任務を私に与えてください」と言っているのです。その後すぐに、そのユーザーのための新しい関連付けを構築しています。実際にミッションを使用すると、クエリを実行して、作成したばかりのミッションを含むそのミッションのすべてのミッションを返します。 .allを呼び出すと、すぐに保存され、ビルドされたミッションだけが返されます。 – Veraticus

+0

ありがとう...もう少し意味がある。 1つのコントローラで意図したとおりに動作するが、他のコントローラでは動作しない理由が不思議ですか?両方で同じことを実行してはいけませんか? – pruett

関連する問題