私の Rails アプリには、次のFoo
モデルがありhas_many
Bar
ます。のコントローラーのビューBar
内でを編集したい。また、編集するたびにページ全体をリロードしたくありません。show
Foo
Bar
これを行うために、私は AJAX を使用しています。Bar
コントローラーには と の 2 つのビューがありshow
ますedit
。bar#show
には編集ボタンがあり、両方のビューは、ページ全体をリロードする代わりに、AJAX を使用して HTTP 要求を実行し、ビュー内の特定のオブジェクトBar
を表す HTML タグのコンテンツを置き換えます。Bar
Foo
show
をレンダリングするとき、オブジェクトfoo#show
ごとに HTTP リクエストを実行したくありません。Bar
また、Bar
のコントローラー メソッドは、データベースからレコードをフェッチする必要があります。これは、 でBar
はやりたくないことですfoo#show
。単一のクエリですべてをロードできるため、それぞれを個別にロードするよりもはるかに高速です。
それで、私がしたことはBar
、通常のビューの代わりに のビューをパーシャルにすることです。そうすれば、コントローラーと別のビューの両方からレンダリングできます。
ここでの問題は、データベースからレコードをロードする以外に、これらのビューにはさらに準備が必要であり、Bar
レコードのロードとは異なり、パーシャルがコントローラーからレンダリングされるか、別のビューからレンダリングされるかに関係なく、これらの準備を行う必要があることです。
今やっているのは、パーシャルの先頭に10行くらいのルビブロックを置いて、そこで下erb
準備をしているところです。それはうまくいきますが、私はそれが悪い設計であることを認識しています.そのような準備は、ビューではなくコントローラで行う必要があります. さらに悪いことに、show
パーシャルの準備コードがedit
代わりにパーシャルをレンダリングする必要があると判断する場合があるため、パーシャルから別のパーシャル レンダーを呼び出す必要がありますshow
。
ただし、そのコードをどこに置くべきかわかりません。ビューヘルパーにしようと思ったのですが、ビューヘルパーはビューから呼び出されるはずで、これもコントローラーから呼び出す必要があります。
では、この問題を解決する RoR の方法は何でしょうか?