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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

511閲覧

Ruby on Rails でコメント機能を実装したい

Hellow

総合スコア11

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/12/10 00:49

編集2021/12/10 00:52

前提・実現したいこと

環境: ruby '2.6.6' rails '6.1.4'

Ruby on Rails で投稿に紐づくコメント機能を実装し、
投稿詳細画面で表示できるようにしたい。

コメント投稿ファームにコメントを入力しているのですが、
コメントが作成されない状況です。

エラーも特に出ていないのですが、Commentを投稿できません。

試したこと

コメント機能の部分は下記リンクに沿って実装を進めています。
rails c でComment.allを使ってコメントが作成されているか、確認したのですが、
コメント自体作成されていない状況です。

https://qiita.com/kurawo___D/items/d2fefdd329f5310113aa

該当のソースコード

ruby

1# routes.rb 2Rails.application.routes.draw do 3 devise_for :users 4 root 'pages#index' 5 resources :users, only: [:show] 6 7 resources :microposts do #postsコントローラへのルーティング 8 resources :comments, only: [:create] #commentsコントローラへのルーティング 9 end 10 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 11end

ruby

1# microposts_controller.rb 2class MicropostsController < ApplicationController 3 before_action :logged_in_user, only: [:new, :create, :destroy] 4 5 def create 6 @micropost = current_user.microposts.build(micropost_params) 7 if @micropost.save 8 flash[:success] = '投稿されました' 9 redirect_to root_url 10 end 11 end 12 13 def destroy 14 end 15 16 def show 17 @micropost = Micropost.find_by(id:params[:id]) 18 @comments = @micropost.comments 19 @comment = current_user.comments.new 20 21 end 22 23 def new 24 @micropost = current_user.microposts.build 25 end 26 27 def micropost_params 28 params.require(:micropost).permit(:content) 29 end 30end 31

ruby

1# comments_controller.rb 2class CommentsController < ApplicationController 3 def create 4 @comment = current_user.comments.new(comment_params) 5 if @comment.save 6 flash[:succes] = '投稿されました' 7 redirect_back(fallback_location: root_path) 8 else 9 redirect_back(fallback_location: root_path) 10 end 11 end 12private 13 def comment_params 14 params.require(:comment).permit(:comment_content) 15 end 16end

ruby

1# micropost.rb 2class Micropost < ApplicationRecord 3 belongs_to :user 4 has_many :comments, dependent: :destroy 5 default_scope -> { order(created_at: :desc) } 6 validates :user_id, presence: true 7 validates :content, presence: true, length: { maximum: 140 } 8end

ruby

1# comment.rb 2class Comment < ApplicationRecord 3 belongs_to :user 4 belongs_to :micropost 5 default_scope -> { order(created_at: :desc) } 6 validates :user_id, presence: true 7 validates :comment_content, presence: true, length: { maximum: 140 } 8end

ruby

1# /microposts/show.html.erb 2<h3>投稿詳細画面</h3> 3<%= @micropost.content %> 4<%# コメント投稿フォーム %> 5<%= render "/comments/comment_form" %> 6 7<% if @comments.any? %> 8 <%# コメントを追加 %> 9 <%= @comments.comment_content %> 10 <%= %> 11<% end %> 12 13

ruby

1# /comments/_comment_form.html.erb 2<%= form_with(model: [@micropost, @comment], method: :post) do |f| %> 3 <div> 4 <p><%= f.label :comment_content %><br> 5 <%= f.text_area :comment_content, placeholder: "コメント" %> 6 <%= f.hidden_field :micropost_id, value: @micropost.id %> 7 </div> 8 <%= f.submit "Comment" %> 9<% end %> 10

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

別コミュニティにてアドバイスをいただき、
Rails s した時のログから解決することができました。
ログを確認したところcomments_controllerのファイルで、:micropost_idが抜けていました。
質問みていただいた方、ありがとうございます????‍♂️

def comment_params
params.require(:comment).permit(:comment_content, :micropost_id)
end

投稿2021/12/10 07:48

Hellow

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問