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

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

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

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

Ruby on Rails

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

Q&A

0回答

1061閲覧

コメントの空のインスタンスを取得したい

souda-takeru

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/11/28 11:32

イベント投稿のアプリを作っているのですが、コメント機能を実装するため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を確認しましたが原因がわかりませんでした。他に原因があれば脚えていただけたらと思います

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

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

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

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

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

winterboum

2020/11/28 11:51

events/show.html.erb でエラーなのですから、見るべきはEventsControllerです
souda-takeru

2020/11/28 12:01

アドバイスありがとうございます!showアクションにコメントの記載を忘れていました。 @comment = Comment.new @comments = @event.comments.includes(:user) で実装できました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問