フリマアプリ作成が一段落して、追加の実装としてコメント機能の実装に取り組みます。
itemsコントローラー
before_action :set_item, only: [:edit, :show,:update]
def show
@user = @item.user
@comment = Comment.new
@comments = @item.comments.includes(:user)
end
private
def set_item
@item = Item.find(params[:id])
end
commentsコントローラー
class CommentsController < ApplicationController
def create
@comment = Comment.new(comment_params)
if @comment.save
redirect_to item_path(params[:item_id])
end
end
private
def comment_params
params.require(:comment).permit(:text).merge(user_id: current_user.id, item_id: params[:item_id])
end
end
で、show.html.erbを
この状態から
<%# /商品の概要 %>
<div class="comment-box">
<form>
<textarea class="comment-text"></textarea>
<p class="comment-warn">
相手のことを考え丁寧なコメントを心がけましょう。
<br>
不快な言葉遣いなどは利用制限や退会処分となることがあります。
</p>
<button type="submit" class="comment-btn">
<%= image_tag "comment.png" ,class:"comment-flag-icon" ,width:"20",height:"25"%>
<span>コメントする<span>
</button>
</form>
</div>
<div class="links">
<a href="#" class="change-item-btn">
< 前の商品
</a>
<a href="#" class="change-item-btn">
後ろの商品 >
</a>
</div>
<div class="comment-box">
<div id="comments">
<div class="comment-form">
<% if user_signed_in? %>
<%= form_with model: [@item, @comment], id: "comment-form" do |f| %>
<%= f.text_area :text, class: "comment-text"%>
<%= f.submit "コメントをする", class: "comment-submit" %>
<% end %>
<% end %>
</div>
<h4><コメント一覧></h4>
<% @item.comments.each do |comment| %>
<div class="comment">
<p class="user-info"><%= comment.user.nick_name %>: </p>
<p><%= comment.text%></p>
</div>
<% end %>
</div>
</div>
この状態へ。
これで一応同期通信であるものの、最低限の機能は実装できた。
あ、ルーティングのネストの設定も忘れずに。
※ずっとコメントが保存されないエラーが出続けていました。
で、何が原因かというと、form_withのメソッドを使う上で、
これ、めっちゃ大事です。
form_withメソッドを使うときはタグは使わないようにしましょう!!!