前提・実現したいこと
簡易掲示板を作成しています。
topicにコメントを入力して送信ボタンを押すとエラーが表示されます。
発生している問題・エラーメッセージ
エラーメッセージ
NoMethodError in MicropostsController#create
undefined method `microposts' for nil:NilClass
該当のソースコード(抜粋)
class MicropostsController < ApplicationController before_action :require_user_logged_in #current_user before_action :correct_user, only: [:destroy] def show @topic = Topic.find_by(id: params[:id]) @micropost = @topic.microposts.build #form_with用 @microposts = @topic.microposts.order(id: :desc).page(params[:page]) end def create @micropost = @topic.microposts.build(micropost_params) ※ if @micropost.save flash[:success] = 'メッセージを投稿しました。' redirect_to root_url else @microposts = current_user.microposts.order(id: :desc).page(params[:page]) flash.now[:danger] = 'メッセージの投稿に失敗しました。' render 'toppages/index' end end
試したこと
※行の「@topic」というクラスが存在しないというエラーだと思いましたので、
インスタンス変数を用意し、インスタンスメソッドが利用できるようにしました。※行の上に以下を追加。
@topic = Topic.new
これでエラーはなくなってmicropostsテーブルにレコードも追加できましたが、
micropostsテーブルのtopic_idカラムがnilとなっています。
そのため。topic画面にコメントが表示されない状態です。
topic_idカラムに現在アクセスしているtopicのidを入れたい場合どのようにコードを書けばよいかわかりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/11 09:38 編集
2020/11/11 09:58
2020/11/11 10:12
2020/11/11 13:01
2020/11/12 10:06 編集