Rails 2.3.1 Web サイトを開発しています。Web サイト全体で、さまざまなページ (ホームページ、投稿の作成ページ、投稿一覧ページ、コメント一覧ページなど) に投稿を作成するためのフォームが必要です。さまざまなコントローラー)。これらの各ページには、対応するコントローラー/アクションで取得されるさまざまなその他の情報が表示されます。例: ホームページには、最新の 10 件の投稿、DB から取得されたコンテンツなどが一覧表示されます。
そこで、投稿作成フォームを独自の部分に移動し、必要なすべてのページにこの部分を含めました。Partial POST のフォームが /questions に送信されることに注意してください (これは PostsController::create にルーティングされます。これはデフォルトの Rails の動作です)。
私が直面している問題は、フォームがホームページ (/home/index. html.erb)。
@post.save? == false, I render action => "../submitting_controller/submitting_action" (少しハックですが、PostsController 以外からアクションをレンダリングできます)。
これは表面上はうまくいくように見えました。不完全なフォームは、すべて正しい @post.errors メッセージなどで送信されたビューでレンダリングされました。問題は、実際の submit_controller/submitting_action メソッドが呼び出されなかったため、ページ上の他のすべてのデータが表示されなかったことです。関連付けられたビュー。(すべてのエラー メッセージと送信された値を持つ @post インスタンス オブジェクトを保持しない redirect_to ではなく、インスタンス オブジェクトを保持する render を実行したことを思い出してください。)
私が見る限り、2つのオプションがあります:
1) @post.save 時に @post オブジェクトをセッションに保存できますか? PostsController::create、redirect_to submit_controller/submitting_action で失敗し、その時点で @post オブジェクトをセッションから取り出し、それを使用してフォーム/エラー メッセージを再設定します。(私が理解している限り、セッションにオブジェクトを保存することは、レールでは悪い習慣です)
2) さまざまな submit_controller/submitting_action から非投稿作成フォーム データをプルするために使用されるすべてのロジックを移動し、それを ApplicationController に配置し、PostsController::create で submit_controller/submitting_action の巨大な switch ステートメントを作成し、メソッドをApplicationController を使用して、各送信ページのレンダリングに必要なすべての追加データを取得します。
Rails内でこれを行う最善の方法について考えていますか?