回答編集履歴
2
スペルミスを修正
answer
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
def confirm
|
16
16
|
@user = User.find(params[:id])
|
17
|
-
@user.attributes =
|
17
|
+
@user.attributes = user_params
|
18
18
|
|
19
19
|
# 戻るときはエラーチェックしない
|
20
20
|
if params[:back]
|
1
confirmを考慮したコードに修正しました
answer
CHANGED
@@ -1,31 +1,51 @@
|
|
1
|
-
|
1
|
+
私のやり方になりますが、
|
2
|
+
edit -> confirm -> updateの順に画面遷移します。
|
3
|
+
保存はconfirmで行い、updateはあくまでも表示のみ行う。
|
4
|
+
という前提のコードです。
|
5
|
+
|
6
|
+
editのPOST先はconfirmにします。
|
7
|
+
confirmのPOST先もconfirmとします。
|
8
|
+
confirmのビューには、backとsaveのボタンがあるとします。
|
9
|
+
|
2
10
|
```ruby
|
3
11
|
def edit
|
4
12
|
@user = User.find(params[:id])
|
5
13
|
end
|
6
14
|
|
7
|
-
def
|
15
|
+
def confirm
|
8
16
|
@user = User.find(params[:id])
|
17
|
+
@user.attributes = user_prams
|
9
18
|
|
19
|
+
# 戻るときはエラーチェックしない
|
10
20
|
if params[:back]
|
11
21
|
render :edit
|
12
22
|
return
|
13
23
|
end
|
14
24
|
|
15
|
-
# フォームの内容をセットし、エラーをチェック
|
16
25
|
# エラーがあれば編集画面へ戻す
|
17
|
-
@user.attributes = user_prams
|
18
26
|
unless @user.valid?
|
19
27
|
render :edit
|
20
28
|
return
|
21
29
|
end
|
22
30
|
|
23
|
-
|
31
|
+
if params[:save]
|
24
|
-
# 失敗した時に例外が発生したほうが原因を調べやすいので、saveではなくsave!を使う
|
25
|
-
|
32
|
+
if @user.save
|
33
|
+
# updateへリダイレクト
|
34
|
+
# リダイレクトするのは、F5などでブラウザのリロードで
|
35
|
+
# 保存処理が二重に動かないようにするため
|
36
|
+
redirect_to :update
|
37
|
+
else
|
38
|
+
# DBへの保存に失敗
|
39
|
+
# 編集画面へ戻す
|
40
|
+
render :edit
|
41
|
+
end
|
42
|
+
end
|
26
43
|
|
44
|
+
# 特にやることなし
|
27
|
-
|
45
|
+
# ビューで完了しましたなどのメッセージを書いておけばOK
|
28
|
-
|
46
|
+
def update
|
47
|
+
end
|
48
|
+
|
29
49
|
end
|
30
50
|
|
31
51
|
```
|