私のスタックはRailsのですが、問題は、フレームワークの独立RESTで無効なPUT/POSTが原因でUXの混乱を処理する最も良い方法は?
RESTの方法論は、既存のユーザーの編集フォームを見るために
と言う実際にある:
でGET: users/:id/edit
既存のユーザーを更新するには:
PUT: users/:id
これは、検証エラー
するための手段は何これは、フォームが検証に失敗した場合を除き、すべての賢明です。フォームは、URLを検証していない場合、あなたは上で終わるusers/:id/edit
URLではありませんが、代わりに:
users/:id
これには二つの問題が発生します。一つは、ナビゲーションで、他のユーザーがフォームをリフレッシュするとどうなるかです:
新鮮編集フォーム:
同じ形式エラーが発生した - URLとNAVは、私たちがしている示唆しているがどこか別の
視覚的にページが共同でnavとURLとしてnfusingすると、ユーザーは編集フォームにはなく、resource#show
ページに表示されます。
彼らは今のフォームを更新した場合、ユーザーが見ている何- 完全に別のページ
また、他の意味を持っています。ユーザーが不満を感じてフォームをリセットしたい場合、その本能はページを更新することになります。彼らがそれをするなら、彼らはresource#show
ページで見つかるでしょうが、resource#edit
ページでは見つからないでしょう。
単純に我々は戻っresource#edit
URLに無効な投稿をリダイレクトすることがあります。これを行うと、(デフォルトではRailsでは)メモリに格納されているので、単に送信した形式でエラーを表示することはできません。
可能な解決策として、これまで私はこれを解決するための二つの方法があります見ることができるように
:user
オブジェクトをシリアル化し、セッションに格納します。PUT users/:id
が検証に失敗した場合
- が。
GET users/:id/edit
にリダイレクトして、エラーを表示するには、次のページ上のオブジェクトをアンシリアライズ - も汚い感じている - はPUT
がusers/:id/edit
ではなくusers/:id
に行くようにルーティング汚い - 変更と感じています。
質問
この問題を解決するための最も適切な方法は何ですか?シリアライゼーションのアプローチがおそらく最も理にかなっているように感じますが、それはRailsのコアの一部ではないので、私は何かが欠けているように感じます。私はこれに取り組む最初の人ではなく、他の人のアプローチに興味があることを知っています。
ここでも満足のいく回答はありませんが、http://stackoverflow.com/questions/5047136/the-correct-way-to-handle-invalid-form-submissions-in-rails/5054434#5054434 – robd