質問: User.new(user_params) にすると何とか動くのですが 新規会員登録画面で定義しているバリデーション?を流用してしまうらしく (そういう設定なので当たり前なんですけど) メールアドレスの変更はせずパスワードだけ変えた場合など 「メールアドレスが被っています」というエラーが出て 変更されず戻されてしまいます。 ### 補足情報(言語/FW/ツール等のバージョンなど) 何か足りない情報、分かり辛い表現など御座いましたら遠慮なくお申し付けください。 随時追加/変更させていただきます。 貴重なお時間を頂き、ありがとうございます。
回答: 私のやり方になりますが、 edit -> confirm -> updateの順に画面遷移します。 保存はconfirmで行い、updateはあくまでも表示のみ行う。 という前提のコードです。 editのPOST先はconfirmにします。 confirmのPOST先もconfirmとします。 confirmのビューには、backとsaveのボタンがあるとします。 ``` def edit @user = User.find(params[:id]) end def confirm @user = User.find(params[:id]) @user.attributes = user_params # 戻るときはエラーチェックしない if params[:back] render :edit return end # エラーがあれば編集画面へ戻す unless @user.valid? render :edit return end if params[:save] if @user.save # updateへリダイレクト # リダイレクトするのは、F5などでブラウザのリロードで # 保存処理が二重に動かないようにするため redirect_to :update else # DBへの保存に失敗 # 編集画面へ戻す render :edit end end # 特にやることなし # ビューで完了しましたなどのメッセージを書いておけばOK def update end end ```