質問編集履歴
3
記述ミスを修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
assert_redirected_to @user
|
30
30
|
end
|
31
31
|
```
|
32
|
-
get
|
32
|
+
getまではテストが成功するのですが、patchの部分でエラーが出ます。
|
33
33
|
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されており、@user.update_attributes(user_params)もtrueでした。
|
34
34
|
|
35
35
|
●エラーメッセージ
|
2
エラーの原因がform_forのルーティングにあることがわかり、Web上ではエラーが出なくなりましたがテストを実行するとエラーが出ます。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Ruby on RailsでMissingTemplateエラー
|
1
|
+
Ruby on RailsでMissingTemplateエラー(form_forのルーティング)
|
body
CHANGED
@@ -1,48 +1,99 @@
|
|
1
|
-
|
1
|
+
試行錯誤した結果、Web上ではエラーが出なくなったのですが、テストを実行すると
|
2
|
-
MissingTemplateというエラーが出
|
2
|
+
MissingTemplateというエラーが出ます。
|
3
|
-
パスもビューも作成したつもりなのですが、テストがうまくいきません。
|
4
|
-
どなたかアドバイスをお願いします。
|
5
3
|
|
4
|
+
●コントローラ
|
5
|
+
```Ruby
|
6
|
+
def edit
|
7
|
+
@user = User.find(params[:user_id])
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
@user = User.find(params[:user_id])
|
12
|
+
if @user.update_attributes(user_params)
|
13
|
+
flash[:success] = "登録情報を更新しました"
|
14
|
+
redirect_to @user
|
15
|
+
elsif
|
16
|
+
render edit_user_setting_path(@user)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
```
|
6
20
|
●テスト
|
7
|
-
```
|
21
|
+
```Ruby
|
8
|
-
|
22
|
+
test "unsuccessful setting edit" do
|
23
|
+
log_in_as(@user)
|
9
24
|
get edit_user_setting_path(@user)
|
10
|
-
assert_template :edit
|
11
25
|
patch user_setting_path(@user), params: { user: { name: "",
|
12
|
-
|
26
|
+
email: "foo@invalid",
|
13
|
-
|
27
|
+
password: "foo",
|
14
|
-
|
28
|
+
password_confirmation: "bar" } }
|
29
|
+
assert_redirected_to @user
|
15
30
|
end
|
16
31
|
```
|
17
32
|
get、assert_templateまではテストが成功するのですが、patchの部分でエラーが出ます。
|
18
|
-
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されて
|
33
|
+
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されており、@user.update_attributes(user_params)もtrueでした。
|
19
34
|
|
20
35
|
●エラーメッセージ
|
21
36
|
```
|
22
|
-
ActionView::MissingTemplate:
|
37
|
+
ActionView::MissingTemplate:
|
23
38
|
ActionView::MissingTemplate: Missing template users/762146111/setting/edit with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in:
|
24
39
|
* "/home/ubuntu/workspace/fashion_search/app/views"
|
25
40
|
|
26
|
-
app/controllers/users/settings_controller.rb:
|
41
|
+
app/controllers/users/settings_controller.rb:16:in `update'
|
27
|
-
test/integration/users_edit_test.rb:
|
42
|
+
test/integration/users_edit_test.rb:13:in `block in <class:UsersEditTest>'
|
28
43
|
```
|
29
44
|
|
30
45
|
●ルーティング(config/routes.rb)
|
31
|
-
```
|
46
|
+
```Ruby
|
32
47
|
resources :users do
|
33
48
|
resource :setting, only:[ :edit, :update ], controller: 'users/settings'
|
34
|
-
|
49
|
+
end
|
35
50
|
```
|
36
51
|
|
37
|
-
●現状のルーティング(rails routesの結果)
|
52
|
+
●現状のルーティング($ rails routesの結果)
|
38
|
-
```
|
53
|
+
```Ruby
|
39
54
|
edit_user_setting GET /users/:user_id/setting/edit(.:format) users/settings#edit
|
40
55
|
user_setting PATCH /users/:user_id/setting(.:format) users/settings#update
|
41
56
|
PUT /users/:user_id/setting(.:format) users/settings#update
|
42
57
|
```
|
58
|
+
●ビュー(app/views/users/settings/edit.html.erb)
|
59
|
+
以前はWeb上でもエラーが出ていたのですが、上から3行目のurlをusers_pathからuser_setting_pathに修正したところ、Web上ではエラーが出なくなりました。
|
43
|
-
|
60
|
+
```Ruby
|
61
|
+
<% provide(:title, "ユーザー設定変更") %>
|
62
|
+
<% provide(:button_text, '変更を保存') %>
|
63
|
+
<% provide(:url, user_setting_path) %>
|
64
|
+
<h1>ユーザー登録情報の編集</h1>
|
65
|
+
|
66
|
+
<div class="row">
|
67
|
+
<div class="col-md-6 col-md-offset-3">
|
68
|
+
<%= render 'users/form' %>
|
69
|
+
<div class="gravatar_edit">
|
70
|
+
<%= gravatar_image_tag @user %>
|
71
|
+
<a href="http://gravatar.com/emails" target="_blank" rel="noopener" >変更</a>
|
72
|
+
</div>
|
73
|
+
</div>
|
74
|
+
</div>
|
44
75
|
```
|
76
|
+
|
45
|
-
app/views/users/
|
77
|
+
●ビュー(app/views/users/_form.html.erb)
|
78
|
+
```Ruby
|
79
|
+
<%= form_for(@user, url: yield(:url)) do |f| %>
|
80
|
+
<%= render 'shared/error_messages', object: @user %>
|
81
|
+
|
82
|
+
<%= f.label :name, "名前" %>
|
83
|
+
<%= f.text_field :name, class: 'form-control' %>
|
84
|
+
|
85
|
+
<%= f.label :email, "Eメールアドレス" %>
|
86
|
+
<%= f.email_field :email, class: 'form-control' %>
|
87
|
+
|
88
|
+
<%= f.label :password, "パスワード" %>
|
89
|
+
<%= f.password_field :password, class: 'form-control' %>
|
90
|
+
|
91
|
+
<%= f.label :password_confirmation, "パスワードの確認" %>
|
92
|
+
<%= f.password_field :password_confirmation, class: 'form-control' %>
|
93
|
+
|
94
|
+
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
|
95
|
+
<% end %>
|
46
96
|
```
|
47
|
-
|
97
|
+
Web上ではエラーが出ないのにテストでエラーが出るのはなぜでしょうか?
|
98
|
+
テストの書き方に問題があるのか、ルーティングがよくないのか、ほかのところに原因があるのか・・・。
|
48
|
-
どなたか、
|
99
|
+
どなたかわかる方、お願いします!
|
1
ビューについての記述を追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -40,6 +40,9 @@
|
|
40
40
|
user_setting PATCH /users/:user_id/setting(.:format) users/settings#update
|
41
41
|
PUT /users/:user_id/setting(.:format) users/settings#update
|
42
42
|
```
|
43
|
-
|
43
|
+
●作成済みのビュー
|
44
|
+
```
|
45
|
+
app/views/users/settings/edit.html.erb
|
46
|
+
```
|
44
47
|
もし必要な情報が漏れていたら、お手数ですがご指摘いただけないでしょうか。
|
45
48
|
どなたか、アドバイスお願いします!
|