質問編集履歴
3
記述ミスを修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
|
61
61
|
```
|
62
62
|
|
63
|
-
get
|
63
|
+
getまではテストが成功するのですが、patchの部分でエラーが出ます。
|
64
64
|
|
65
65
|
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されており、@user.update_attributes(user_params)もtrueでした。
|
66
66
|
|
2
エラーの原因がform_forのルーティングにあることがわかり、Web上ではエラーが出なくなりましたがテストを実行するとエラーが出ます。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Ruby on RailsでMissingTemplateエラー
|
1
|
+
Ruby on RailsでMissingTemplateエラー(form_forのルーティング)
|
test
CHANGED
@@ -1,30 +1,60 @@
|
|
1
|
-
|
1
|
+
試行錯誤した結果、Web上ではエラーが出なくなったのですが、テストを実行すると
|
2
2
|
|
3
|
-
MissingTemplateというエラーが出
|
3
|
+
MissingTemplateというエラーが出ます。
|
4
|
-
|
5
|
-
パスもビューも作成したつもりなのですが、テストがうまくいきません。
|
6
|
-
|
7
|
-
どなたかアドバイスをお願いします。
|
8
4
|
|
9
5
|
|
10
6
|
|
11
|
-
●
|
7
|
+
●コントローラ
|
8
|
+
|
9
|
+
```Ruby
|
10
|
+
|
11
|
+
def edit
|
12
|
+
|
13
|
+
@user = User.find(params[:user_id])
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
def update
|
20
|
+
|
21
|
+
@user = User.find(params[:user_id])
|
22
|
+
|
23
|
+
if @user.update_attributes(user_params)
|
24
|
+
|
25
|
+
flash[:success] = "登録情報を更新しました"
|
26
|
+
|
27
|
+
redirect_to @user
|
28
|
+
|
29
|
+
elsif
|
30
|
+
|
31
|
+
render edit_user_setting_path(@user)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
12
36
|
|
13
37
|
```
|
14
38
|
|
39
|
+
●テスト
|
40
|
+
|
41
|
+
```Ruby
|
42
|
+
|
15
|
-
|
43
|
+
test "unsuccessful setting edit" do
|
44
|
+
|
45
|
+
log_in_as(@user)
|
16
46
|
|
17
47
|
get edit_user_setting_path(@user)
|
18
48
|
|
19
|
-
assert_template :edit
|
20
|
-
|
21
49
|
patch user_setting_path(@user), params: { user: { name: "",
|
22
50
|
|
23
|
-
email: "foo@invalid",
|
51
|
+
email: "foo@invalid",
|
24
52
|
|
25
|
-
password: "foo",
|
53
|
+
password: "foo",
|
26
54
|
|
27
|
-
password_confirmation: "bar" } }
|
55
|
+
password_confirmation: "bar" } }
|
56
|
+
|
57
|
+
assert_redirected_to @user
|
28
58
|
|
29
59
|
end
|
30
60
|
|
@@ -32,7 +62,7 @@
|
|
32
62
|
|
33
63
|
get、assert_templateまではテストが成功するのですが、patchの部分でエラーが出ます。
|
34
64
|
|
35
|
-
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されて
|
65
|
+
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されており、@user.update_attributes(user_params)もtrueでした。
|
36
66
|
|
37
67
|
|
38
68
|
|
@@ -40,7 +70,7 @@
|
|
40
70
|
|
41
71
|
```
|
42
72
|
|
43
|
-
ActionView::MissingTemplate:
|
73
|
+
ActionView::MissingTemplate:
|
44
74
|
|
45
75
|
ActionView::MissingTemplate: Missing template users/762146111/setting/edit with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in:
|
46
76
|
|
@@ -48,9 +78,9 @@
|
|
48
78
|
|
49
79
|
|
50
80
|
|
51
|
-
app/controllers/users/settings_controller.rb:1
|
81
|
+
app/controllers/users/settings_controller.rb:16:in `update'
|
52
82
|
|
53
|
-
test/integration/users_edit_test.rb:1
|
83
|
+
test/integration/users_edit_test.rb:13:in `block in <class:UsersEditTest>'
|
54
84
|
|
55
85
|
```
|
56
86
|
|
@@ -58,21 +88,21 @@
|
|
58
88
|
|
59
89
|
●ルーティング(config/routes.rb)
|
60
90
|
|
61
|
-
```
|
91
|
+
```Ruby
|
62
92
|
|
63
93
|
resources :users do
|
64
94
|
|
65
95
|
resource :setting, only:[ :edit, :update ], controller: 'users/settings'
|
66
96
|
|
67
|
-
en
|
97
|
+
end
|
68
98
|
|
69
99
|
```
|
70
100
|
|
71
101
|
|
72
102
|
|
73
|
-
●現状のルーティング(rails routesの結果)
|
103
|
+
●現状のルーティング($ rails routesの結果)
|
74
104
|
|
75
|
-
```
|
105
|
+
```Ruby
|
76
106
|
|
77
107
|
edit_user_setting GET /users/:user_id/setting/edit(.:format) users/settings#edit
|
78
108
|
|
@@ -82,14 +112,86 @@
|
|
82
112
|
|
83
113
|
```
|
84
114
|
|
115
|
+
●ビュー(app/views/users/settings/edit.html.erb)
|
116
|
+
|
117
|
+
以前はWeb上でもエラーが出ていたのですが、上から3行目のurlをusers_pathからuser_setting_pathに修正したところ、Web上ではエラーが出なくなりました。
|
118
|
+
|
85
|
-
|
119
|
+
```Ruby
|
120
|
+
|
121
|
+
<% provide(:title, "ユーザー設定変更") %>
|
122
|
+
|
123
|
+
<% provide(:button_text, '変更を保存') %>
|
124
|
+
|
125
|
+
<% provide(:url, user_setting_path) %>
|
126
|
+
|
127
|
+
<h1>ユーザー登録情報の編集</h1>
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
<div class="row">
|
132
|
+
|
133
|
+
<div class="col-md-6 col-md-offset-3">
|
134
|
+
|
135
|
+
<%= render 'users/form' %>
|
136
|
+
|
137
|
+
<div class="gravatar_edit">
|
138
|
+
|
139
|
+
<%= gravatar_image_tag @user %>
|
140
|
+
|
141
|
+
<a href="http://gravatar.com/emails" target="_blank" rel="noopener" >変更</a>
|
142
|
+
|
143
|
+
</div>
|
144
|
+
|
145
|
+
</div>
|
146
|
+
|
147
|
+
</div>
|
86
148
|
|
87
149
|
```
|
88
150
|
|
151
|
+
|
152
|
+
|
89
|
-
app/views/users/
|
153
|
+
●ビュー(app/views/users/_form.html.erb)
|
154
|
+
|
155
|
+
```Ruby
|
156
|
+
|
157
|
+
<%= form_for(@user, url: yield(:url)) do |f| %>
|
158
|
+
|
159
|
+
<%= render 'shared/error_messages', object: @user %>
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
<%= f.label :name, "名前" %>
|
164
|
+
|
165
|
+
<%= f.text_field :name, class: 'form-control' %>
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
<%= f.label :email, "Eメールアドレス" %>
|
170
|
+
|
171
|
+
<%= f.email_field :email, class: 'form-control' %>
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
<%= f.label :password, "パスワード" %>
|
176
|
+
|
177
|
+
<%= f.password_field :password, class: 'form-control' %>
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
<%= f.label :password_confirmation, "パスワードの確認" %>
|
182
|
+
|
183
|
+
<%= f.password_field :password_confirmation, class: 'form-control' %>
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
|
188
|
+
|
189
|
+
<% end %>
|
90
190
|
|
91
191
|
```
|
92
192
|
|
93
|
-
|
193
|
+
Web上ではエラーが出ないのにテストでエラーが出るのはなぜでしょうか?
|
94
194
|
|
195
|
+
テストの書き方に問題があるのか、ルーティングがよくないのか、ほかのところに原因があるのか・・・。
|
196
|
+
|
95
|
-
どなたか、
|
197
|
+
どなたかわかる方、お願いします!
|
1
ビューについての記述を追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -82,7 +82,13 @@
|
|
82
82
|
|
83
83
|
```
|
84
84
|
|
85
|
+
●作成済みのビュー
|
85
86
|
|
87
|
+
```
|
88
|
+
|
89
|
+
app/views/users/settings/edit.html.erb
|
90
|
+
|
91
|
+
```
|
86
92
|
|
87
93
|
もし必要な情報が漏れていたら、お手数ですがご指摘いただけないでしょうか。
|
88
94
|
|