前提・実現したいこと
環境: 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
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。