前提・実現したいこと
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
回答2件
あなたの回答
tips
プレビュー