コントローラーでインスタンス変数を管理することに圧倒されているので、それらを管理するためのより良い方法があるかどうかを考えています。
私の状況では、PagesController
フロント ページのレンダリングを処理する があります。フロント ページには、もともと異なるコントローラーに属する複数の小さなフォームがあります (たとえば、新しい投稿フォームを作成し、専用の PostsController がありますが、便宜上、フロント ページだけで簡単に投稿できます)。それらはすべて、フォームを保持するために対応するインスタンス変数を必要とします (たとえば、新しい投稿フォームには @post オブジェクトが必要です)。
PagesController#index
フォームを機能させるには、これらのインスタンス変数を手動で my に追加する必要があることがわかりました。
@post = Post.new # similar for other objects
@some_other_var = OtherController.new # another one
@one_more = AnotherController.new # again
# even more @variables here when the website is big
これでも問題ないと思われる場合はcreate
、edit
アクションが失敗したとき (たとえば、検証に合格しないとき) を考えて、前のページをレンダリングする必要があります。これらの行を再度追加する必要があります。実際には、レンダリングがあるときはいつでも、すべてのこれらの変数を含める必要があります。
そのようなコードを必要とするすべてのアクションに手動で入力するのは非常に面倒に思えます。また、Web サイトが複雑になると、そのうちの 1 つか 2 つを見逃すのは簡単です。
そのため、毎回同じコードを記述するのではなく、一度だけ含める必要があるように、そのような変数を管理するより良い方法があるかどうか疑問に思っています。