前提・実現したいこと
画像投稿のサイトを作成しています。
投稿ページにコメントができるように実装しています。
実装しているなかで、NoMethodErrorが発生してしました。
発生している問題・エラーメッセージ
NoMethodError in PostsController#show undefined method `comments' for #<Post:0x00007fe2f8d05a38> Did you mean? committed!
該当のソースコード
rails
1Postコントローラー 2 3class PostsController < ApplicationController 4 before_action :set_post, only: [:show, :edit, :update, :destroy] 5 before_action :authenticate_user!, except: [:index, :show] 6 before_action :move_to_index, only: [:edit, :update, :destroy] 7 8 def index 9 @posts = Post.includes(:user).order("created_at DESC") 10 end 11 12 def new 13 @post = Post.new 14 end 15 16 def create 17 @post = Post.new(post_params) 18 if @post.save 19 redirect_to root_path 20 else 21 render :new 22 end 23 end 24 25 def show 26 @comment = Comment.new 27 @comments = @post.comments ←ここでエラーになっています。 28 end 29 30 def edit 31 end 32 33 def update 34 if @post.update(post_params) 35 redirect_to post_path 36 else 37 render :edit 38 end 39 end 40 41 def destroy 42 @post.destroy 43 redirect_to root_path 44 end 45 46 private 47 48 def post_params 49 params.require(:post).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 50 end 51 52 def set_post 53 @post = Post.find(params[:id]) 54 end 55 56 def move_to_index 57 redirect_to root_path unless current_user == @post.user 58 end 59 60end
rails
1ルーティング 2 3Rails.application.routes.draw do 4 devise_for :users 5 root to: 'posts#index' 6 resources :posts, only: [:new, :create, :show, :edit, :update, :destroy] do 7 resources :comments, only: :create 8 end 9 resources :users, only: [:index, :show, :edit, :update, :destroy] 10end
rails
1class Prototype < ApplicationRecord 2 belongs_to :user 3 has_one_attached :image 4 has_many :comments, dependent: :destroy ←ここが抜けていました。 dependent: :destroyも一緒に追記 5 6 validates :title, presence: true 7 validates :catch_copy, presence: true 8 validates :concept, presence: true 9 validates :image, presence: true 10end
試したこと
発生しているエラーは「NoMethodError」で、undefined method`comments' というメソッドが定義されていないといことなので、@commentsという変数が定義されていないのでエラーということはわかりましたが、before_action_set_postで @post = Post.find(params[:id])をわたせるようになっています。原因追求に困っております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 14:10