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

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

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

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

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

1回答

568閲覧

Nomethod Error データベースにコメント情報が保存できず困っています。

qwertyuiopp

総合スコア3

Ruby

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

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2021/10/18 13:18

編集2021/10/28 09:54

##NoMethodError (undefined method `id' for nil:NilClass)

前提・実現したいこと

現在、アプリケーションのコメント機能の実装を行っています。
アプリケーション内容としましては、レシピを投稿⇨新規登録・ログイン済みのユーザーは投稿に対してコメントを行える実装を行いたいのですが、コメントを入力し、送信ボタンを押すとNomethoeErrorが出力され、保存・表示ができない状態です。

原因がわかる方、ご教授お願い致します。

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

Nomethod Error(undefined method `id' for nil:NilClass)

該当のソースコード

show.html.erb

<%# コメント投稿機能 %> <div class="comment__container"> <%= form_with(model: [@recipe, @comment], local: true) do |f| %> <%= f.text_area :text, placeholder: "コメントする", rows: "2" %> <%= f.submit '送信' %> <% end %> <div class="comments"> <h4><コメント一覧></h4> <% @comments.each do |comment| %> <p> <strong><%= link_to comment.user.nickname, "/users/#{comment.user_id}" %>:</strong> <%= comment.text %> </p> <% end %> </div> </div>

comments_controller

def create @comment = Comment.create(comment_params[:id]) binding.pry redirect_to "/recipes/#{comment.recipe.id}" end private def comment_params params.require(:comment).permit(:comment).merge(user_id: current_user.id, recipe_id: params[:recipe_id]) end

recipes_controller

~~~~~~~省略~~~~~~~~~~ def show @recipe = Recipe.find(params[:id]) @comment = Comment.new @comments = @recipe.comments.includes(:user) end ~~~~~~~~省略~~~~~~~~~~

models/comment.rb

class Comment < ApplicationRecord belongs_to :recipe belongs_to :user end

models/user.rb

has_many :comments

models/recipes.rb

has_many :comments

試したこと

保存ができない・idがnilになっているので、バリデーションかアソシエーションがうまくかかっていないと思い確認しましたが、きちんと記述できているように思えます。

原因がわかる方いらっしゃいましたら、ご教授お願い致します。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

winterboum

2021/10/18 13:39

エラーメッセージは全部載せてください
qwertyuiopp

2021/10/18 13:59

エラー画像が添付できておりませんでした。 申し訳ございません。 修正済みですのでご確認の程、よろしくお願い致します。
guest

回答1

0

ベストアンサー

current_user が nillだと言われてます。

loginしていない場合もコメントを投稿するボタンが押せるのでは?
l

投稿2021/10/18 22:58

winterboum

総合スコア23416

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

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

qwertyuiopp

2021/10/19 02:17 編集

有難うございます。viewファイルにファイルに条件分岐を行ったところエラーは解決されました! ただ、viewファイルへの条件分岐の追加・コメント一覧表示部分の <%= comment.text %> を <%= comment.comment %> へ変更したところdbに保存はされるのですが、commentカラムのみNULLになっており コメント部分のみが表示されない状態です。。。 申し訳ございませんが原因がお分かりになるようでしたら再度ご教授お願い致します。
winterboum

2021/10/19 02:18

@comment = Comment.create(comment_params[:id]) がおかしいですね @comment = Comment.create(comment_params) では? でもってまだだめなら binding.pry で止まったところで、@comment.errors.messages を見てみましょう
qwertyuiopp

2021/10/19 02:26

お返事、有難うございます。 binding.pryで確認したところ、@commentのtext部分がnilでしたので、comment(保存したいカラム)へ記述変更したところ、無事に保存・表示ができました! 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問