コメント機能をつけたいのにDBに保存されません。
解決したいこと
Ruby on Railsでフリマアプリをつくっています。
出品されている商品へのコメント機能をつけたいのですが、コメントを入力してもデータベースに保存されません。
解決方法を教えて下さい。
初めての質問なので、足りない情報などありましたらすみません。
発生している問題・エラー
エラー文は出ていません。
一応ターミナルのエラー文らしきものは以下になります。
Processing by ItemsController#show as HTML
Parameters: {"authenticity_token"=>"lgPO6uesQkD9oKywOBFaAZFKNBbZrPSttUTXuh3LLgOldVaus8sMIE3LcLG192ZRSY60OBYWS3f2Bkqf+O1VLw==", "comment"=>{"text"=>"good"}, "commit"=>"コメントする", "id"=>"4"}
Item Load (0.3ms) SELECT `items`.* FROM `items` WHERE `items`.`id` = 4 LIMIT 1
↳ app/controllers/items_controller.rb:56:in `set_item'
Rendering items/show.html.erb within layouts/application
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1
↳ app/views/shared/_header.html.erb:18
Rendered shared/_header.html.erb (Duration: 2.8ms | Allocations: 2853)
ActiveStorage::Attachment Load (0.2ms) SELECT `active_storage_attachments`.* FROM `active_storage_attachments` WHERE `active_storage_attachments`.`record_id` = 4 AND `active_storage_attachments`.`record_type` = 'Item' AND `active_storage_attachments`.`name` = 'image' LIMIT 1
↳ app/views/items/show.html.erb:10
ActiveStorage::Blob Load (0.3ms) SELECT `active_storage_blobs`.* FROM `active_storage_blobs` WHERE `active_storage_blobs`.`id` = 4 LIMIT 1
↳ app/views/items/show.html.erb:10
Order Load (0.2ms) SELECT `orders`.* FROM `orders` WHERE `orders`.`item_id` = 4 LIMIT 1
↳ app/views/items/show.html.erb:11
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
↳ app/views/items/show.html.erb:26
Comment Load (0.2ms) SELECT `comments`.* FROM `comments` WHERE `comments`.`item_id` = 4
↳ app/views/items/show.html.erb:104
Rendered shared/_footer.html.erb (Duration: 1.8ms | Allocations: 2532)
Rendered items/show.html.erb within layouts/application (Duration: 13.0ms | Allocations: 12896)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 25ms (Views: 21.2ms | ActiveRecord: 1.9ms | Allocations: 34740)
該当するソースコード
comments_controller.rb
class CommentsController < ApplicationController
def create
@item = Item.find(params[:item_id])
@comment = Comment.new(comment_params)
if @comment.save
redirect_to item_path(@comment.item)
else
render :show
end
end
private
def comment_params
params.require(:comment).permit(:text).merge(user_id: current_user.id, item_id: params[:item_id])
end
end
items_controller.rb
略
def show
@comment = Comment.new
@comments = @item.comments.includes(:user)
end
略
routes.rb
Rails.application.routes.draw do
devise_for :users
get 'items/index'
root to: "items#index"
resources :items do
resources :comments, only: :create
resources :orders, only: [:index, :create]
end
end
show.html.erb
<div class="comment-box">
<% if user_signed_in? && @item.order.nil? %>
<form>
<%= form_with model: [@item, @comment], url: item_comments_path(@item), local: true do |f| %>
<%= f.text_field :text ,class: "comment-text"%>
<p class="comment-warn">
相手のことを考え丁寧なコメントを心がけましょう。
<br>
不快な言葉遣いなどは利用制限や退会処分となることがあります。
</p>
<%= f.submit "コメントする", class:"comment-btn" %>
<% end %>
</form>
<% elsif @item.order.present? %>
<strong><p>※※※ この商品は売り切れています ※※※</p>
</strong>
<% else %>
<strong><p>※※※ コメントの投稿には新規登録/ログインが必要です ※※※</p>
</strong>
<% end %>
<div class="comments">
<h4><コメント一覧></h4>
<% @comments.each do |comment| %>
<li class="comments_list">
<%= comment.content %>
<%= link_to "#{comment.user.name}", "#" %>
</li>
<% end %>
</div>
</div>
自分で試したこと
アソシエーションは確認しましたが、組めていました。
comments_controller.rbのdef create内でbinding.pryを試しましたが止まらず、商品詳細画面に戻ってしまいます。
0