イベント投稿のアプリを作っているのですが、コメント機能を実装するためcreateアクションにてeventとcommentのからのインスタンスを定義し、showのビューへ渡したのですがcommentのインスタンスが定義されていないエラーがおきました。ルーティングではeventモデルへネストするよう記述し、各アソシエーションも定義しました。ストロングパラメーターにてpaamsの値を定義したのですがエラーが起きてしまいました。
エラーコード
NoMethodError in Events#show Showing /Users/user/projects/asomemo/app/views/events/show.html.erb where line #50 raised: undefined method `model_name' for nil:NilClass Extracted source (around line #50): 48 <div class="prototype__comments"> 49 <%# ログインしているユーザーには以下のコメント投稿フォームを表示する %> 50 <%= form_with model: [@event, @comment], local: true do |f|%> 51 <div class="field"> 52 <%= f.label "コメント" %><br /> 53 <%= f.text_field :text %> ```コメントモデル ```ここに言語を入力 class Comment < ApplicationRecord belongs_to :user belongs_to :event validates :text, presence: true end ```イベントモデル ```ここに言語を入力 class Event < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :user has_many_attached :images belongs_to :facility belongs_to :scale belongs_to :category has_many :event_tag_relations, dependent: :destroy has_many :tags, through: :event_tag_relations, dependent: :destroy has_many :comments, dependent: :destroy end ```ユーザーモデル ```ここに言語を入力 class User < ApplicationRecord has_many :events, dependent: :destroy has_many :comments validates :nickname, presence: true devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable end ```ルーティング ```ここに言語を入力 Rails.application.routes.draw do devise_for :users root to: "events#index" resources :events, only: [:new, :create, :show, :destroy, :edit, :update] do collection do get 'search' end resources :comments, only: :create end end ```コントローラー ```ここに言語を入力 class CommentsController < ApplicationController def create @event = Event.find(params[:event_id]) @comment = @event.comments.new(comment_params) if @comment.save redirect_to event_path(@comment.event) else render "events/show" end end private def comment_params params.require(:comment).permit(:text).merge(user_id: current_user.id, event_id: params[:event_id]) end end ```ビュー ```ここに言語を入力 <div class="prototype__comments"> <%# ログインしているユーザーには以下のコメント投稿フォームを表示する %> <%= form_with model: [@event, @comment], local: true do |f|%> <div class="field"> <%= f.label "コメント" %><br /> <%= f.text_field :text %> </div> <div class="actions"> <%= f.submit "送信する", class: :form__btn %> </div> <% end %> <%# // ログインしているユーザーには上記を表示する %> <ul class="comments_lists"> <%= @comments %> <% @comments.each do |comment| %> <%# 投稿に紐づくコメントを一覧する処理を記述する %> <li class="comments_list"> <%= comment.text %> <%= link_to comment.user.nickname, user_path(comment.user), class: :comment_user %> <% end%> </li> <%# // 投稿に紐づくコメントを一覧する処理を記述する %> </ul> </div> ```行ったこと エラー画面にて@commentを入力するとnilと空になっていました。原因を探りアソシエーションやparamsを確認しましたが原因がわかりませんでした。他に原因があれば脚えていただけたらと思います
あなたの回答
tips
プレビュー