回答編集履歴

1

自己解決したので解決方法を記入しました。

2017/11/10 04:01

投稿

pukotan
pukotan

スコア11

test CHANGED
@@ -1,12 +1,8 @@
1
- 解決したわけではないのですが、エラー原因の見当いた解決と、新に質問を投稿しようと思います
1
+ エラー原因は、render使い方間違っていたことでした。
2
2
 
3
3
 
4
4
 
5
- 以下、エラー原因について記載。
6
-
7
-
8
-
9
- コントローラをprintデバッグしたところ、コントローラは1→2→3→6→7行目の順に処理されていることがわかりました。
5
+ コントローラをprintデバッグしたところ、コントローラは、意図したとおり1→2→3→6→7行目の順に処理されていることがわかりました。
10
6
 
11
7
  また、@userの値をチェックしたところ、elsifの前後で値が変わっていることがわかりました。
12
8
 
@@ -56,8 +52,64 @@
56
52
 
57
53
  ```
58
54
 
55
+ したがって、8行目のrenderに問題があると判断してrenderの使い方を調べました。
56
+
57
+ (参考URL https://railsguides.jp/layouts_and_rendering.html)
58
+
59
+ すると、同じコントローラ内の別のアクションのテンプレートを表示したいときには、render :actionまたはrender "action"と書けばよいことがわかりました。
59
60
 
60
61
 
61
- elsifの後に3XXリダイレクトが要求されていることが、エラーの原因ではないかと思います。
62
62
 
63
+ 修正したところ、テストのエラー箇所がupdateから、その次の行のassert_redirected_to @userに変わりました。
64
+
65
+ コントローラでリダイレクトをしていないので、assert_redirected_toをassert_templateに修正し、リダイレクト先がユーザーページでなく編集ページなので@userから:editに変更したところ、エラーが出なくなり、Web上でも問題なく動作するようになりました。
66
+
67
+
68
+
69
+ 修正後のコントローラ
70
+
71
+ ```Ruby
72
+
73
+ def update
74
+
75
+ @user = User.find(params[:user_id])
76
+
77
+ if @user.update_attributes(user_params)
78
+
79
+ flash[:success] = "登録情報を更新しました"
80
+
81
+ redirect_to @user
82
+
83
+ elsif
84
+
85
+ render :edit
86
+
87
+ end
88
+
89
+ end
90
+
91
+ ```
92
+
93
+ 修正後のテスト
94
+
95
+ ```Ruby
96
+
97
+ test "unsuccessful setting edit" do
98
+
99
+ log_in_as(@user)
100
+
101
+ get edit_user_setting_path(@user)
102
+
103
+ patch user_setting_path(@user), params: { user: { name: "",
104
+
105
+ email: "foo@invalid",
106
+
107
+ password: "foo",
108
+
109
+ password_confirmation: "bar" } }
110
+
63
- なぜこうなったのか、調査していこうと思います。
111
+ assert_template :edit
112
+
113
+ end
114
+
115
+ ```