Rails v2.1 を使用して、複数の場所からアクセスできるコントローラーのアクションがあるとします。たとえば、Rails アプリ内には、2 つの異なるビューからユーザーを編集するためのリンクがあります。1 つはユーザー インデックス ビューで、もう 1 つは別のビュー (すべてのページのナビゲーション バーから) からです。
ユーザーがクリックしたリンクに応じて、ユーザーを適切な場所にリダイレクトする最良の方法は何だろうと思っています。例えば:
例 1:
- すべてのユーザーを一覧表示する
- リスト内のユーザーの「編集」をクリックします
- ユーザーがフォームで「保存」をクリックすると、コントローラーは 1 にリダイレクトします。
例 2:
- ユーザーはアプリケーション内の任意のページにいる可能性があり、ナビゲーション バーには現在のユーザーを編集するためのリンクが表示されます
- ユーザーがリンクをクリックして編集する
- ユーザーがフォームの「保存」をクリックすると、コントローラーは、ユーザーがナビゲーション バーの「編集」リンクをクリックしたときに表示されていたページにリダイレクトします。
私はそれが過去に行われたのを見てきました:
- リンクが表示された元のコントローラー/アクションを使用して、元の編集リンクにパラメーターを配置します。これをより DRY にするために、ヘルパーで @controller.controller_name と @controller.action_name を使用できます。
- コントローラーはパラメーターをセッション変数に保存します。
- コントローラーがレコードを保存すると、セッション変数にリダイレクトされます。
このソリューションで特に気に入らないのは、ビュー内の該当するすべてのリンクにパラメーターを追加する必要があることです。これをすべてコントローラーに組み込む方法があるかどうか疑問に思っています。
私が考えていたより良い方法の1つは、次のことでした。
- 「編集」アクションに before_filter を配置して、リファラーをセッションに保存します (これは十分に信頼できますか?)。
- 「更新」がヒットすると、コントローラーはセッション変数にリダイレクトしてから、セッション変数を削除します。
これを行う最善の方法について何か考えはありますか?