私は本質的にデータを複製する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.erb
とindex.html.erb
の両方のファイルに追加します。 Users_controller
で意図したとおりに動作しますが、Missions_controller
に余分な「オブジェクト」を作成します。コレクションをレンダリングするとき、コントローラー内の変数@mission
と@missions
の両方をレンダリングしているようです。
なぜこれを解決できますか?私は部分を共有ビューディレクトリに移動しようとしましたが、問題は残ります。私はインスタンス変数に名前を付けた方法と関係があると仮定しています。私は大変です。ありがとうございました
うわー、それは魅力的でした!私はまだ確信していません。 Hm。それは '@ missions'という呼び出しがmissions_controllerから来ているという事実と関係がありますか?なぜこのコレクションへの呼び出しに '@ mission'という変数が含まれているのか混乱しています。 – pruett
user.missionsは実際に使用されるまで評価されません。データを要求するメソッドが呼び出された後にのみ評価されるアソシエーションプロキシを返します。ですから、あなたが@ user.missionsと言うとき、あなたは「将来のある時点で、このユーザに関連するすべての任務を私に与えてください」と言っているのです。その後すぐに、そのユーザーのための新しい関連付けを構築しています。実際にミッションを使用すると、クエリを実行して、作成したばかりのミッションを含むそのミッションのすべてのミッションを返します。 .allを呼び出すと、すぐに保存され、ビルドされたミッションだけが返されます。 – Veraticus
ありがとう...もう少し意味がある。 1つのコントローラで意図したとおりに動作するが、他のコントローラでは動作しない理由が不思議ですか?両方で同じことを実行してはいけませんか? – pruett