Ryuichi_natsume
@Ryuichi_natsume

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

コメント機能の保存について

解決したいこと

コメントの保存と表示を行いたいのですが、DBに保存されず躓いております。
どなたか解決方法を教えて下さると幸いです。

発生している問題・エラー

rails.rb
Started GET "/items/1?authenticity_token=y%2FoFtP94bxQT3H%2F3b5cxTtak7qWYdIv%2BUmg1%2B38198FaQn2taQ%2FSFP0w%2Bn5JDjQ3QbOtxTYIEyPX%2BMwJRiB2nQ%3D%3D&comment%5Btext%5D=%E3%81%82%E3%81%82&commit=%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E3%81%99%E3%82%8B" for ::1 at 2022-02-03 13:48:57 +0900
Processing by ItemsController#show as HTML
  Parameters: {"authenticity_token"=>"y/oFtP94bxQT3H/3b5cxTtak7qWYdIv+Umg1+38198FaQn2taQ/SFP0w+n5JDjQ3QbOtxTYIEyPX+MwJRiB2nQ==", "comment"=>{"text"=>"ああ"}, "commit"=>"コメントをする", "id"=>"1"}

  Item Load (0.5ms)  SELECT `items`.* FROM `items` WHERE `items`.`id` = 1 LIMIT 1
  ↳ app/controllers/items_controller.rb:63:in `set_item'
  Rendering items/show.html.erb within layouts/application
  User Load (0.3ms)  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: 4.5ms | Allocations: 2329)
  ActiveStorage::Attachment Load (0.3ms)  SELECT `active_storage_attachments`.* FROM `active_storage_attachments` WHERE `active_storage_attachments`.`record_id` = 1 AND `active_storage_attachments`.`record_type` = 'Item' AND `active_storage_attachments`.`name` = 'images'
  ↳ app/views/items/show.html.erb:9
  ActiveStorage::Blob Load (0.3ms)  SELECT `active_storage_blobs`.* FROM `active_storage_blobs` WHERE `active_storage_blobs`.`id` = 1 LIMIT 1
  ↳ app/views/items/show.html.erb:9
  PurchaseManagement Load (0.3ms)  SELECT `purchase_managements`.* FROM `purchase_managements` WHERE `purchase_managements`.`item_id` = 1 LIMIT 1
  ↳ app/views/items/show.html.erb:18
  User Load (0.6ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  ↳ app/views/items/show.html.erb:50
  Comment Load (0.4ms)  SELECT `comments`.* FROM `comments` WHERE `comments`.`item_id` = 1
  ↳ app/views/items/show.html.erb:103
  Rendered shared/_footer.html.erb (Duration: 5.0ms | Allocations: 1868)
  Rendered items/show.html.erb within layouts/application (Duration: 26.6ms | Allocations: 10873)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 78ms (Views: 72.1ms | ActiveRecord: 2.6ms | Allocations: 31931)

上記がコメントを入力した後、ターミナルで表示された内容の全文です。
Parametersの中身や「Completed 200 OK」の表記もあるので挙動に問題がないと思いましたが、添付した画像のように、sequel proには何も反映されておりません。
image.png

該当するソースコード

モデル部分

class Comment < ApplicationRecord
  belongs_to :user
  belongs_to :item
end
class Item < ApplicationRecord
  
  has_many :comments
  
end
class User < ApplicationRecord
  
  has_many :comments
end

コントローラー部分

class CommentsController < ApplicationController
  def create
    @comment = Comment.new(comment_params)
    if @comment.save
      redirect_to item_path(@item)
    end
  end

  private
  def comment_params
    params.require(:comment).permit(:text).merge(user_id: current_user.id, item_id: params[:item_id])
  end
end
class ItemsController < ApplicationController
  before_action :set_item, except: [:index ,:new, :create]
  before_action :authenticate_user!, only: [:new, :edit]
  before_action :diffrent_user, only: [:edit, :update, :destroy]
 
  def show
    @comment = Comment.new
    @comments = @item.comments.includes(:user)
    end

end

ビュー部分

<div class="comment-box">
    <form>
        <div id="comments">
       <br>
      <% if user_signed_in? %>
        <%= form_with model: [@item,@comment],id: "comment-form" do |f| %>
          <%= f.text_area :text , class: "comment-text"%>
          <p class="comment-warn">
            相手のことを考え丁寧なコメントを心がけましょう。
            <br>
            不快な言葉遣いなどは利用制限や退会処分となることがあります。
          </p>
          <%= f.submit "コメントをする", class: "comment-btn" %>
          <%= image_tag "comment.png" ,class:"comment-flag-icon" ,width:"20",height:"25"%>
        <%end%>
      <%end%>
        <h4><コメント一覧></h4>
       <% @item.comments.each do |comment| %>
         <div class="comment">
           <p class="user-info"><%= comment.user.nickname %>: </p>
           <p><%= comment.text%></p>
         </div>
        <% end %>
       </div>
   </form>
 </div>

ルーティング

Rails.application.routes.draw do
  devise_for :users
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root to: "items#index"
  resources :items, shallow: true do
    resources :comments, only: :create
    resources :orders, only:[:index, :create]
  end
end

image.png

マイグレーション部分

class CreateComments < ActiveRecord::Migration[6.0]
  def change
    create_table :comments do |t|
      t.text :text
      t.integer :user_id
      t.integer :item_id

      t.timestamps
    end
  end
end

以上です。
お時間を割いてくださってありがとうございます。
質問に不備がございましたら、すぐに追記いたします。
よろしくお願いいたします。

自分で試したこと

CommentsControllerにてbinding.pryを行ったところ、画面が止まらず、効きませんでした。
また、ビューにて<%= form_with model: [@item,@comment],url: item_comments_path, method: :post, id: "comment-form" do |f| %>とurlとmethodを追加し、コードを変更してみたものの、挙動に変化がございませんでした。

0

1Answer

はじめまして。

1番最初の画像が全てなのだとしたら、「Started GET "/items/1?authenticity_token=y%2FoFtP94bxQT3H%2F3b5cxTtak7qWYdIv%2BUmg1%2B38198FaQn2taQ%2FSFP0w%2Bn5JDjQ3QbOtxTYIEyPX%2BMwJRiB2nQ%3D%3D&comment%5Btext%5D=%E3%81%82%E3%81%82&commit=%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E3%81%99%E3%82%8B" for ::1 at 2022-02-03 13:48:57 +0900
Processing by ItemsController#show as HTML」と記載があるように、ItemControllerのshowしか呼ばれていないような感じがしますね。

また、binding.pryを利用しても止まらないということは、binding.pryの箇所が実行されていない可能性があります。

Routing等を順番にさらっていくことはいかがでしょうか。

がんばってください。

0Like

Comments

  1. 御回答ありがとうございます。
    view部分にて、<form>を二重に囲っていたことで意図しない挙動になっておりました。
    無事解決に至りました。

Your answer might help someone💌