質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

246閲覧

Railsチュートリアル(第4版)の10章の「ユーザを更新する」について

TEMM

総合スコア15

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/07/27 09:28

編集2018/08/02 04:39

前提・実現したいこと

Railsチュートリアル(第4版)の10章の「ユーザを更新する」について

発生している問題・エラーメッセージ

railsチュートリアルの10章を取り組んでおり、10.1.3「編集失敗時のテスト」を実行したところエラーが出てしまいました。基本的にテキスト通り進めたので、どこを直したら良いのかわからなくて困っています。どうか力を貸ししていただきたいです。

エラーメッセージ ERROR["test_successful_edit", Minitest::Result, 0.5487779939994653] test_successful_edit#Minitest::Result (0.55s) AbstractController::ActionNotFound: AbstractController::ActionNotFound: The action 'update' could not be found for UsersController test/integration/users_edit_test.rb:25:in `block in <class:UsersEditTest>' E 29/21: [===================== ] 72% Time: 00:00:00, ETA: 00:00:00 Error: UsersEditTest#test_successful_edit: AbstractController::ActionNotFound: The action 'update' could not be found for UsersController test/integration/users_edit_test.rb:25:in `block in <class:UsersEditTest>'

該当のソースコード

Ruby,Ruby

1ソースコード 2#sample_app/app/controllers/users_controller.rb 3class UsersController < ApplicationController 4 5 def show 6 @user = User.find(params[:id]) 7 end 8 9 def new 10 @user = User.new 11 end 12 13 def create 14 @user = User.new(user_params) 15 if @user.save 16 log_in @user 17 flash[:success] = "Welcome to the Sample App!" 18 redirect_to @user 19 else 20 render 'new' 21 end 22 end 23 24 def edit 25 @user = User.find(params[:id]) 26 end 27 28 def update 29 @user = User.find(params[:id]) 30 if @user.update_attributes(user_params) 31 # 更新に成功した場合を扱う。 32 else 33 render 'edit' 34 end 35 end 36 37 private 38 39 def user_params 40 params.require(:user).permit(:name, :email, :password, 41 :password_confirmation) 42 end 43end 44 45#sample_app/test/integration/user_edit_test.rb 46require 'test_helper' 47 48class UsersEditTest < ActionDispatch::IntegrationTest 49 50 def setup 51 @user = users(:michael) 52 end 53 54 test "unsuccessful edit" do 55 get edit_user_path(@user) 56 assert_template 'users/edit' 57 patch user_path(@user), params: { user: { name: "", 58 email: "foo@invalid", 59 password: "foo", 60 password_confirmation: "bar" } } 61 62 assert_template 'users/edit' 63 end 64end 65 66#sample_app/app/views/users/_form.html.erb 67<%= form_for(@user, url: yield(:url)) do |f| %> 68 <%= render 'shared/error_messages', object:@user %> 69 70 <%= f.label :name %> 71 <%= f.text_field :name, class: 'form-control' %> 72 73 <%= f.label :email %> 74 <%= f.email_field :email, class: 'form-control' %> 75 76 <%= f.label :password %> 77 <%= f.password_field :password, class: 'form-control' %> 78 79 <%= f.label :password_confirmation, "Confirmation" %> 80 <%= f.password_field :password_confirmation, class: 'form-control' %> 81 82 <%= f.submit yield(:button_text), class: "btn btn-primary" %> 83<% end %> 84 85#sample_app/app/views/users/edit.html.erb 86<% provide(:title, 'Edit user') %> 87<% provide(:button_text, 'Save changes') %> 88<% provide(:url, user_path) %> 89<h1>Update your profile</h1> 90<div class="row"> 91 <div class="col-md-6 col-md-offset-3"> 92 <%= render 'form' %> 93 <div class="gravatar_edit"> 94 <%= gravatar_for @user %> 95 <a href="http://gravatar.com/emails" target="_blank" rel="noopener">change</a> 96 </div> 97 </div> 98</div>

試したこと

補足情報(FW/ツールのバージョンなど)

</routes.rb>
Rails.application.routes.draw do
get 'sessions/new'

root 'static_pages#home'
get '/help', to: 'static_pages#help'
get '/about', to: 'static_pages#about'
get '/contact', to: 'static_pages#contact'
get '/signup', to: 'users#new'
post '/signup', to: 'users#create'
get '/login', to: 'sessions#new'
post '/login', to: 'sessions#create'
delete '/logout', to: 'sessions#destroy'
resources :users
end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/01 06:21

routes 見せてもらえますか?
TEMM

2018/08/02 04:40

補足情報の方に載せました。よろしくお願いします。
guest

回答2

0

resources :usersと記述されてるのでHTTPリクエストがPOSTであればupdateアクションを見つけてくれるはずなんですけどね...。

一応確認ですが、

ruby

if @user.update_attributes(user_params)

更新に成功した場合を扱う。

else

のまさに`# 更新に成功した場合を扱う。`部分を書き忘れてる〜なんてことはないですよね...? 書き忘れてたとしてもそこが原因という確証はないですが。 もしくはあまり自信がないですが`<% provide(:url, user_path) %>`が原因のような気もします。 routes.rbで`resources :users`としているのにわざわざURLを指定して回りくどくやっている 真意は正直わかりかねますが、user_pathに引数を指定してみれば直るのかもしれません。 送信したリクエストがGETだった...なんてことはないですよね...?すみません、あまりよくわかりません。 Railstutorialってそんな書き方してましたっけ...?

投稿2018/08/02 07:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TEMM

2018/08/03 10:51

ご回答いただきありがとうございます。 指摘いただいた点に関しましては試してみましたが、上手くいきませんでした。 そのため、前章で保存しておいたコードを復元してやり直した所、上手くいったのでそのまま続けています。協力していただきありがとうございます。
guest

0

自己解決

前章で保存しておいたコードを復元してやり直した所、上手くいったのでそのまま続けています。

投稿2018/08/03 13:55

TEMM

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問