#前提
ruby 2.6.5
rails 6.0.0
上記の環境で、ブログアプリ作成中です。投稿の編集画面で、コメントの投稿・表示をさせたいです。
#解決したいこと
articleのshow画面で、コメント投稿欄を表示させたいのですが、該当コードの記述では、「NoMethodError in Articles#show
Showing /Users/laflora/projects/game_plan/app/views/articles/show.html.haml where line #25 raised:
undefined method model_name' for nil:NilClass」というエラーが表示されてしまいます。 おそらく、model名を読み取れていないためのエラーだと考えています。 rails c でComment.createを試してみると、commentのidが生成されていないのが、エラーにも関係あるのでは、、と思うのですが、解決策が思い付かず、お力添えをお願いしたいです。。 #該当コード(ターミナル)
views/articles/show.html.haml`
.container %h1.text-center = @article.title .row .col .col-md-6.mx-5 - if @article.img_id.present? = image_tag attachment_url(@article, :img), alt: '', height: '500px', width: '500px' - else = image_tag 'background.jpg', alt: '', height: '500px', width: '500px' %br %p.text-weight-bold = @article.body %br %p.text-right = l @article.created_at, format: :short %br = link_to '投稿の編集', edit_article_path(@article), class: 'btn btn-primary' = link_to '投稿を削除', article_path(@article), method: :delete, data: {confirm: "投稿を削除してもよろしいですか?" }, class: 'btn btn-danger' .col .row.bg-white.text-dark.mt-2 .col .col-md-6.mx-5 コメント機能の投稿欄 = form_with model: [@article, @comment] do |f| = f.text_area :text %br = f.submit "送信" .col
comments_controller.rb
class CommentsController < ApplicationController def create @comment = Comment.new(comment_params) @comment.user_id = currnet_user.id @comment.article_id = article.id if @comment.save redirect_to "/articles/#{comment.article.id}" else redirect_to root_path end private def comment_params params.require(:comment).permit(:text) end end
ターミナル
[7] pry(main)> Comment.create(user_id:"1", article_id:"1", text:"aaaaaaa") (0.7ms) BEGIN User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 (2.0ms) ROLLBACK => #<Comment:0x00007fd39da5a230 id: nil, user_id: 1, article_id: 1, text: "aaaaaaa", created_at: nil, updated_at: nil> [8] pry(main)> Comment.create!(user_id:"1", article_id:"1", text:"aaaaaaaaa") (0.2ms) BEGIN User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 (3.1ms) ROLLBACK ActiveRecord::RecordInvalid: バリデーションに失敗しました: Aticleを入力してください from /Users/laflora/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/validations.rb:80:in `raise_validation_error'
#試したこと
・comments_controller.rbのcreateアクションに、@comment.article_id = article.idを追加。
・Comment.createが働くかrails cで確認(該当コード参照)
・form_with model: [@article, @comment] do |f|を、form_with url root_path do |f|に変えてリロード→結果:フォーム画面は表示させられましたが、投稿はできなかったです。
#備考
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 12:40
2020/07/20 13:16