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

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

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

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

Q&A

1回答

986閲覧

railsチュートリアルで発生したエラーの解決方法をご教示いただきたいです。

gaugau_2

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2021/05/13 11:59

編集2022/01/12 10:55

前提・実現したいこと

現在、rails tutorialを学習しているプログラミング初心者です。
第11章まで進んだのですが、rails testを実行してみたところエラーが多すぎてどこから手をつけて良いのか、また、どこが間違っているのかわからなくなってしまいました。

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

ERROR["test_should_redirect_destroy_when_not_logged_in", UsersControllerTest, 0.39628575800088583] test_should_redirect_destroy_when_not_logged_in#UsersControllerTest (0.40s) AbstractController::ActionNotFound: AbstractController::ActionNotFound: The action 'destroy' could not be found for UsersController test/controllers/users_controller_test.rb:18:in `block (2 levels) in <class:UsersControllerTest>' test/controllers/users_controller_test.rb:17:in `block in <class:UsersControllerTest>' ERROR["test_should_redirect_index_when_not_logged_in", UsersControllerTest, 0.43351379099840415] test_should_redirect_index_when_not_logged_in#UsersControllerTest (0.43s) NoMethodError: NoMethodError: undefined method `logged_in_user' for #<UsersController:0x00007f2e99172400> Did you mean? logged_in? test/controllers/users_controller_test.rb:12:in `block in <class:UsersControllerTest>' ERROR["test_should_redirect_destroy_when_logged_in_as_a_non-admin", UsersControllerTest, 0.5090885159988829] test_should_redirect_destroy_when_logged_in_as_a_non-admin#UsersControllerTest (0.51s) AbstractController::ActionNotFound: AbstractController::ActionNotFound: The action 'destroy' could not be found for UsersController test/controllers/users_controller_test.rb:26:in `block (2 levels) in <class:UsersControllerTest>' test/controllers/users_controller_test.rb:25:in `block in <class:UsersControllerTest>'

該当のソースコード

require 'test_helper' class UsersControllerTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) @other_user = users(:archer) end test "should redirect index when not logged in" do get users_path assert_redirected_to login_url end test "should redirect destroy when not logged in" do assert_no_difference 'User.count' do delete user_path(@user) end assert_redirected_to login_url end test "should redirect destroy when logged in as a non-admin" do log_in_as(@other_user) assert_no_difference 'User.count' do delete user_path(@user) end assert_redirected_to root_url end end

以下、users_controllersのコードです。
destroyの項目があるのにエラーが出てしまっております。

class UsersController < ApplicationController before_action :logged_in_user, only: [:index, :edit, :update, :destroy] before_action :correct_user, only: [:edit, :update] before_action :admin_user, only: :destroy def index @users = User.paginate(page: params[:page]) end def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) if @user.update_attributes(user_params) flash[:success] = "Profile updated" redirect_to @user else render 'edit' end def destroy User.find(params[:id]).destroy flash[:success] = "User deleted" redirect_to users_url end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end # beforeアクション # ログイン済みユーザーかどうか確認 def logged_in_user unless logged_in? store_location flash[:danger] = "Please log in." redirect_to login_url end end # 正しいユーザーかどうか確認 def correct_user @user = User.find(params[:id]) redirect_to(root_url) unless current_user?(@user) end # 管理者かどうか確認 def admin_user redirect_to(root_url) unless current_user.admin? end end end

以下、rails routesコマンドを実行した結果になります。

ec2-user:~/environment/sample_app (account-activation) $ rails routes Prefix Verb URI Pattern Controller#Action sessions_new GET /sessions/new(.:format) sessions#new users_new GET /users/new(.:format) users#new root GET / static_pages#home help GET /help(.:format) static_pages#help about GET /about(.:format) static_pages#about contact GET /contact(.:format) static_pages#contact signup GET /signup(.:format) users#new login GET /login(.:format) sessions#new POST /login(.:format) sessions#create logout DELETE /logout(.:format) sessions#destroy users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit

ほかにもエラーが発生しているのですが、抜粋して質問させていただきました。
ご教示の程よろしくお願いいたします。

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

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

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

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

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

siruku6

2021/05/13 12:11

英語ですが、エラーメッセージを読んでみましょう。 UsersController に destroy というアクションがないよ、と書かれています。 この情報だけで解決できない場合は、自身が作成した users_controller.rb も質問文に掲載してみてはいかがでしょう。
siruku6

2021/05/13 12:41 編集

ありがとうございます!controllerは書かれているようですね! そうすると、今度は、routes.rbも確認してみるとどうでしょうか? `rails routes`コマンドを実行しても確認するか、localhost:3000/rails/infoにアクセスして確認すると確実かと思います。(誤記にも気づける)
gaugau_2

2021/05/13 15:58

ちなみにこの他にもErrorやFailが出ているのですが、全部載せたほうが分かりやすかったりするのでしょうか?
guest

回答1

0

before_action :admin_user, only: :destroy
なのに、

def setup @user = users(:michael) @other_user = users(:archer) end

かつ、loginしていない

それが原因かも

投稿2021/05/13 22:48

winterboum

総合スコア23284

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

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

gaugau_2

2021/05/16 02:44

回答ありがとうございます。 どのように書けばよろしいでしょうか?
winterboum

2021/05/16 23:39

minitest は長いこと使っていないので、ちと曖昧ですが 1, setup で @admin_user を作る 2. loginさせるのは、ユーザーのlogin管理を何を使っているかで変わります。今まで作った中でlogin必要な画面でどうしてました? それに準じてください チュートリアルならどっかに書いてあるのでは テスト
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問