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

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

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

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

Ruby

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

Q&A

解決済

2回答

6142閲覧

rails 退会機能について

graI8LfAxFIWZVP

総合スコア12

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2019/07/13 09:05

前提・実現したいこと

railsで退会処理の機能を作っていますが機能しません。
助言をお願いいたします。

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

undefined method `destroy' for nil:NilClass

該当のソースコード

######users_controller.rb

def destroy @user = User.find_by(id: params[:id]) @user.destroy flash[:success] = 'ユーザーを削除しました。' end

######routes.rb

resources :users, only: [:index, :show, :new, :create, :destroy, :edit, :update] delete 'destroy_user', to: 'users#destroy'

######_navbar.html.erb

<%= link_to '退会', destroy_user_path, method: :delete %></li>

######$ rails routes

Prefix Verb URI Pattern Controller#Action root GET / toppages#index 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 sessions POST /sessions(.:format) sessions#create new_session GET /sessions/new(.:format) sessions#new session DELETE /sessions/:id(.:format) sessions#destroy delete_user DELETE /delete_user(.:format) users#destroy logout DELETE /logout(.:format) sessions#destroy

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

rails 5.2.3
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

destroy_user_pathrails routesの結果を見る限りなさそうですね。
ただ、されたいこととしては、link_toでUser#destoryを動かして、そのユーザーを削除することだと思います。

なので、例えば以下のようにすると、UserControllerのDeleteアクションが正しく動くかもです。

<%# *current_user部分に、削除したユーザーが入ります。 %> <%= link_to '退会', user_path(current_user), method: :delete %></li>

投稿2019/07/13 09:16

hatsu

総合スコア1809

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

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

graI8LfAxFIWZVP

2019/07/13 09:23

データの受け渡しができていませんでした!ありがとうございました!
guest

0

nil とは なにもない というオブジェクトです。
それに対してメソッドを実行しようとするとエラーになります。

@user がnilになっています。
該当のユーザーは存在していますか?

あと、 resources と独自で定義したものがあるのとがちょっと引っかかったのと

idを検索キーとしてデータを取得する場合は find を慣習的に使うことが多いです。

投稿2019/07/13 09:14

編集2019/07/13 09:21
mochizuki-pg

総合スコア192

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

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

graI8LfAxFIWZVP

2019/07/13 09:22

ご丁寧な解説ありがとうございました!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問