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

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

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

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

Q&A

解決済

3回答

11545閲覧

Railsで uninitialized constant UserController とでてしまう

Ohiirechan

総合スコア24

Ruby on Rails

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

0グッド

0クリップ

投稿2017/01/29 08:36

###困っていること
Railsで退会機能を作っています。
user/1/retire というパスで退会の画面に進もうとしているのですが、以下のようなエラーがでてしまい進みません

###エラーメッセージ

Routing Error uninitialized constant UserController

コードは以下のとおりです。
###該当のソースコード

application.rb

<li><%= link_to '退会', user_retire_path(@user) %></li>

route.rb

resources :user do get 'retire' end

event_infos_controller.rb

def show @user = current_user @event = EventInfo.find(params[:id]) @tickets = @event.tickets.includes(:user).order(:created_at) end

users_controller.rb

class UsersController < ApplicationController before_action :authenticate def retire endr def destroy if current_user.destroy reset_session flash[:notice] = "退会が完了しました" redirect_to root_path else render :retire end end end

どうかおしえてください。

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

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

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

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

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

guest

回答3

0

自己解決

ビューで使用する@つきの変数を、アクションで定義し忘れてないか?現在のアクションだけでなく、移動先のアクションもみよ。

rake routes でルーティングを確認し、書き損ねてたり、 XXX_path に引数をいれ忘れがないか確認せよ。

生きず待ったら Ctrl + c でいったんサーバーを再起動させよ。

投稿2017/01/30 15:24

Ohiirechan

総合スコア24

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

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

0

このような場合、 rake routes を実行して、 url と コントローラの関係をチェックすると良いとおもいます。

$ bundle exec rake routes $ bundle exec rake routes Prefix Verb URI Pattern Controller#Action user_retire GET /user/:user_id/retire(.:format) user#retire user_index GET /user(.:format) user#index POST /user(.:format) user#create new_user GET /user/new(.:format) user#new edit_user GET /user/:id/edit(.:format) user#edit user GET /user/:id(.:format) user#show PATCH /user/:id(.:format) user#update PUT /user/:id(.:format) user#update DELETE /user/:id(.:format) user#destroy

↑の結果からわかるのは
/user/1/retire に get でアクセスすると、 UserController の retire メソッドがよびだされる
ことです。

すでに、他の方からの回答にあるように、
作成されているのは UsersController であり, UserController ではありません。(s の有無に注意)

投稿2017/01/29 10:23

katoy

総合スコア22324

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

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

0

これが原因ですね。

  • config/routes.rb

ruby

1resources :user do 2 get 'retire' 3end

あなたが作っているのは、UsersControllerであって、UserControllerではありませんよね。
しかし、上記の指定だと、:userと書いているのでUserControllerを使うという指示になります。
当然、UserControllerは存在しないのでエラーが発生します。

という事で、resources :users に修正すれば解決すると思います。

投稿2017/01/29 09:06

mingos

総合スコア4025

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

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

Ohiirechan

2017/01/29 10:02

ああ、そこがミスだったのですか!ありがとうございます。ですが、その後、 No route matches {:action=>"retire", :controller=>"users", :user_id=>nil} missing required keys: [:user_id] こんなエラーがでてきました。 application.rb の引数の @user が悪いのかとおもい、 @user = current_user を @user = User.new(id: 1) としましたが、ダメでした。 教えてください!
mingos

2017/01/29 10:08

missing required keys: [:user_id]と書いてありますよね? という事は、:user_idをパラメータとして、渡す必要があるという事です。 retireのルーティングには、:user_idが必要なのでしょう。 user_retire_path(@user) と書いてある部分は、 user_retire_path(user_id: @user.id) と書くべきなのではないですか?
Ohiirechan

2017/01/30 10:32

ありがとうございます。じつはそれでやっても undefined method `id' for nil:NilClass こういうエラーがでてました。 しかし、よくみてみると、users_controller.rbのretireアクションで @user = current_user が抜けていたのが原因だったようです。何度もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問