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

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

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

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

Ruby

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

Q&A

解決済

1回答

3274閲覧

Railsで発生したRouting Errorが解決できません。

s_tatsuki

総合スコア44

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2019/01/28 04:22

前提・実現したいこと

RailsでTweetAppというSNSアプリを勉強している時に
いいね機能を作っている時に以下のエラーメッセージが発生しました。

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

Routing Error uninitialized constant LikesController Rails.root: /home/progate/tweet_app Application Trace | Framework Trace | Full Trace Routes Routes match in priority from top to bottom Helper HTTP Verb Path Controller#Action Path / Url Path Match POST /likes/:post_id/create(.:format) likes#create POST /likes/:post_id/destroy(.:format) likes#destroy POST /users/:id/update(.:format) users#update GET /users/:id/edit(.:format) users#edit users_create_path POST /users/create(.:format) users#create signup_path GET /signup(.:format) users#new users_index_path GET /users/index(.:format) users#index GET /users/:id(.:format) users#show login_path POST /login(.:format) users#login logout_path POST /logout(.:format) users#logout GET /login(.:format) users#login_form posts_index_path GET /posts/index(.:format) posts#index posts_new_path GET /posts/new(.:format) posts#new GET /posts/:id(.:format) posts#show posts_create_path POST /posts/create(.:format) posts#create GET /posts/:id/edit(.:format) posts#edit POST /posts/:id/update(.:format) posts#update POST /posts/:id/destroy(.:format) posts#destroy GET / home#top about_path GET /about(.:format) home#about Request Parameters: {"_method"=>"post", "authenticity_token"=>"+Jv5+gec6GZBMmhW4te56EsZ/JEgwkwecqRZxjpwkwwmHP0vmR4iFG1uVEWwnS5fm1F628h5FQPv5UCYn8R8pA==", "instanceId"=>"00b46870d4f6", "containerPort"=>"3000", "languageName"=>"rails5", "locale"=>"ja", "post_id"=>"1"} Toggle session dump Toggle env dump Response Headers: None

該当のソースコード

ruby

1#Postモデル 2class Post < ApplicationRecord 3 validates :content, {presence: true, length: {maximum: 140}} 4 validates :user_id, {presence: true} 5 6 def user 7 return User.find_by(id: self.user_id) 8 end 9end 10

ruby

1#Userモデル 2class User < ApplicationRecord 3 validates :name, {presence: true} 4 validates :email, {presence: true, uniqueness: true} 5 6 def posts 7 return Post.where(user_id: self.id) 8 end 9end 10

ruby

1#views/posts/show.html.erb 2<div class="main posts-show"> 3 <div class="container"> 4 <div class="posts-show-item"> 5 <div class="post-user-name"> 6 <img src="<%= "/user_images/#{@user.image_name}" %>"> 7 <%= link_to(@user.name, "/users/#{@user.id}") %> 8 </div> 9 <p> 10 <%= @post.content %> 11 </p> 12 <div class="post-time"> 13 <%= @post.created_at %> 14 </div> 15 <% if Like.find_by(user_id: @current_user.id, post_id: @post.id) %> 16 <%= link_to("/likes/#{@post.id}/destroy", {method: "post"}) do %> 17 <span class="fa fa-heart like-btn-unlike"></span> 18 <% end %> 19 <% else %> 20 <%= link_to("/likes/#{@post.id}/create", {method: "post"}) do %> 21 <span class="fa fa-heart like-btn"></span> 22 <% end %> 23 <% end %> 24 25 <% if @post.user_id == @current_user.id %> 26 <div class="post-menus"> 27 <%= link_to("編集", "/posts/#{@post.id}/edit") %> 28 <%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %> 29 </div> 30 <% end %> 31 </div> 32 </div> 33</div>

ruby

1#Postsコントローラー 2class PostsController < ApplicationController 3 before_action :authenticate_user 4 before_action :ensure_correct_user, {only: [:edit, :update, :destroy]} 5 6 def index 7 @posts = Post.all.order(created_at: :desc) 8 end 9 10 def show 11 @post = Post.find_by(id: params[:id]) 12 @user = @post.user 13 end 14 15 def new 16 @post = Post.new 17 end 18 19 def create 20 @post = Post.new( 21 content: params[:content], 22 user_id: @current_user.id 23 ) 24 if @post.save 25 flash[:notice] = "投稿を作成しました" 26 redirect_to("/posts/index") 27 else 28 render("posts/new") 29 end 30 end 31 32 def edit 33 @post = Post.find_by(id: params[:id]) 34 end 35 36 def update 37 @post = Post.find_by(id: params[:id]) 38 @post.content = params[:content] 39 if @post.save 40 flash[:notice] = "投稿を編集しました" 41 redirect_to("/posts/index") 42 else 43 render("posts/edit") 44 end 45 end 46 47 def destroy 48 @post = Post.find_by(id: params[:id]) 49 @post.destroy 50 flash[:notice] = "投稿を削除しました" 51 redirect_to("/posts/index") 52 end 53 54 def ensure_correct_user 55 @post = Post.find_by(id: params[:id]) 56 if @current_user.id != @post.user_id 57 flash[:notice] = "権限がありません" 58 redirect_to("/posts/index") 59 end 60 end 61end 62

ruby

1#Likesコントローラー 2class LikesController < ApplicationController 3 before_action :authenticate_user 4 5 def create 6 @like = Like.new(user_id: @current_user.id, post_id: params[:post_id]) 7 @like.save 8 redirect_to("/posts/#{params[:post_id]}") 9 end 10 11 def destroy 12 @like = Like.find_by(user_id: @current_user.id, post_id: params[:post_id]) 13 @like.destroy 14 redirect_to("/posts/#{params[:post_id]}") 15 end 16 17end

ruby

1#ルーティング 2Rails.application.routes.draw do 3 post "likes/:post_id/create" => "likes#create" 4 post "likes/:post_id/destroy" => "likes#destroy" 5 6 post "users/:id/update" => "users#update" 7 get "users/:id/edit" => "users#edit" 8 post "users/create" => "users#create" 9 get "signup" => "users#new" 10 get "users/index" => "users#index" 11 get "users/:id" => "users#show" 12 post "login" => "users#login" 13 post "logout" => "users#logout" 14 get "login" => "users#login_form" 15 16 get "posts/index" => "posts#index" 17 get "posts/new" => "posts#new" 18 get "posts/:id" => "posts#show" 19 post "posts/create" => "posts#create" 20 get "posts/:id/edit" => "posts#edit" 21 post "posts/:id/update" => "posts#update" 22 post "posts/:id/destroy" => "posts#destroy" 23 24 get "/" => "home#top" 25 get "about" => "home#about" 26end 27

試したこと

最初、アソシエーションを試しに使って見たかったので、1対多の関係(has_many,belongs_to)を用いて答えとは違う書き方で進めていましたが、このページでエラーが発生して、元の答えと一緒のコードで書き直しましたが一緒のエラーが発生しました。

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

ProgateのRailsレッスンの最終課題の道場コース、「いいね機能をつくろう」のところで発生しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

LikesControllerのファイルが、きちんとapp/controllers/likes_controller.rbにありますか?

Railsのオートロードはファイル名を基準に進みますので、ファイル名が正しくないとロードに失敗します。

投稿2019/01/28 04:30

maisumakun

総合スコア145183

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

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

s_tatsuki

2019/01/28 04:49 編集

なるほどです!!!確認したらファイル名が `likes_controller.rb` ではなく `likes.controller.rb` になってしまっていました;; ありがとうございます!
maisumakun

2019/01/28 04:55

自分自身、「ファイル名ミス」には時折遭遇します。
s_tatsuki

2019/01/28 05:18

そうなんですね!(笑) こういったエラーコードはどうやったら読めるようになりますか;;
maisumakun

2019/01/28 05:21

「uninitialized constant LikesController」を和訳すれば、「LikesControllerという定数が定義されていません」となります。 で、クラスが未定義になっている場合は大きく分けて「呼ぶべき名前が違う」「定義が本当にない」、そして「定義はされているけどロードに失敗」というパターンがあります。すでにLikesControllerの定義がなされていましたので、前2つの線は消えて「ロード失敗」という理由がメインに浮上した、という感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問