teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

記述ミスを修正しました。

2017/11/09 06:39

投稿

pukotan
pukotan

スコア11

title CHANGED
File without changes
body CHANGED
@@ -29,7 +29,7 @@
29
29
  assert_redirected_to @user
30
30
  end
31
31
  ```
32
- get、assert_templateまではテストが成功するのですが、patchの部分でエラーが出ます。
32
+ getまではテストが成功するのですが、patchの部分でエラーが出ます。
33
33
  でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されており、@user.update_attributes(user_params)もtrueでした。
34
34
 
35
35
  ●エラーメッセージ

2

エラーの原因がform_forのルーティングにあることがわかり、Web上ではエラーが出なくなりましたがテストを実行するとエラーが出ます。

2017/11/09 06:39

投稿

pukotan
pukotan

スコア11

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
- Rails初心者です
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
- test "unsuccessful setting edit" do
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
- email: "foo@invalid",
26
+ email: "foo@invalid",
13
- password: "foo",
27
+ password: "foo",
14
- password_confirmation: "bar" } }
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:12:in `update'
41
+ app/controllers/users/settings_controller.rb:16:in `update'
27
- test/integration/users_edit_test.rb:12:in `block in <class:UsersEditTest>'
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
- en
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/settings/edit.html.erb
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

ビューについての記述を追加しました。

2017/11/09 06:38

投稿

pukotan
pukotan

スコア11

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
  どなたか、アドバイスお願いします!