回答編集履歴

2

スペルミスを修正

2017/01/16 09:32

投稿

mingos
mingos

スコア4025

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  @user = User.find(params[:id])
32
32
 
33
- @user.attributes = user_prams
33
+ @user.attributes = user_params
34
34
 
35
35
 
36
36
 

1

confirmを考慮したコードに修正しました

2017/01/16 09:31

投稿

mingos
mingos

スコア4025

test CHANGED
@@ -1,4 +1,20 @@
1
- こん感じでどうでしょうか?
1
+ 私のやり方にりますが、
2
+
3
+ edit -> confirm -> updateの順に画面遷移します。
4
+
5
+ 保存はconfirmで行い、updateはあくまでも表示のみ行う。
6
+
7
+ という前提のコードです。
8
+
9
+
10
+
11
+ editのPOST先はconfirmにします。
12
+
13
+ confirmのPOST先もconfirmとします。
14
+
15
+ confirmのビューには、backとsaveのボタンがあるとします。
16
+
17
+
2
18
 
3
19
  ```ruby
4
20
 
@@ -10,11 +26,15 @@
10
26
 
11
27
 
12
28
 
13
- def update
29
+ def confirm
14
30
 
15
31
  @user = User.find(params[:id])
16
32
 
33
+ @user.attributes = user_prams
17
34
 
35
+
36
+
37
+ # 戻るときはエラーチェックしない
18
38
 
19
39
  if params[:back]
20
40
 
@@ -26,11 +46,7 @@
26
46
 
27
47
 
28
48
 
29
- # フォームの内容をセットし、エラーをチェック
30
-
31
49
  # エラーがあれば編集画面へ戻す
32
-
33
- @user.attributes = user_prams
34
50
 
35
51
  unless @user.valid?
36
52
 
@@ -42,17 +58,41 @@
42
58
 
43
59
 
44
60
 
45
- # DBに保存
61
+ if params[:save]
46
62
 
47
- # 失敗した時に例外が発生したほうが原因を調べやすいので、saveではなくsave!を使う
63
+ if @user.save
48
64
 
65
+ # updateへリダイレクト
66
+
67
+ # リダイレクトするのは、F5などでブラウザのリロードで
68
+
69
+ # 保存処理が二重に動かないようにするため
70
+
71
+ redirect_to :update
72
+
73
+ else
74
+
75
+ # DBへの保存に失敗
76
+
77
+ # 編集画面へ戻す
78
+
49
- @user.save!
79
+ render :edit
80
+
81
+ end
82
+
83
+ end
50
84
 
51
85
 
52
86
 
53
- flash[:success] = "Profile updated"
87
+ # 特にやることなし
54
88
 
89
+ # ビューで完了しましたなどのメッセージを書いておけばOK
90
+
55
- redirect_to @user
91
+ def update
92
+
93
+ end
94
+
95
+
56
96
 
57
97
  end
58
98