coooco
@coooco

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Railsでコメント投稿機能でエラー

解決したいこと

Ruby on railsの学習を始めて3ヶ月経つものです。
Ruby on Railsでコミュニティーサイトを作っています。
投稿した内容にコメント機能を実装したいです。
コメントを投稿ボタンを押した時にコメントが投稿されず、エラーが出ません。またコメント件数も正常に表示されません。
マークダウンに慣れていないので
見づらいところもあると思いますが、よろしくお願いします。
解決方法を教えてください。

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

コメントが投稿できない。
コメント件数が出ない。

エラー画面は特に出てないです。

該当するソースコード

class Public::CommentsController < ApplicationController

  def create
    @trip_article = TripArticle.find(params[:trip_article_id])
    @comment = @trip_article.comments.new(comment_params)
    @comment.user_id = current_user.id
    @comment.save
    redirect_to trip_article_path(@trip_article.id)
  end

   def destroy
    Comment.find(params[:id]).destroy
    redirect_to trip_article_path(params[:trip_article_id])
   end

  private

  def comment_params
    params.require(:comment).permit(:comment, :user_id, :trip_article_id)
  end

end

index.html

<% @trip_articles.each do |trip_article| %>
 <p><%= image_tag trip_article.user.get_image(50,50) %>
 <%= trip_article.user.nickname %></p>
 <p><%= image_tag trip_article.get_image(400,500) %></p>
 <p>コメント<%= link_to trip_article.comments.count, trip_article_path(trip_article) %>件</p>
 <p><%= link_to 'show', trip_article_path(trip_article) %></p>
 <p><%= trip_article.title %></p>
 <p><%= trip_article.text %></p>
 <p><%= trip_article.created_at.strftime('%Y/%m/%d') %></p>
<% end %>

routes.rb

Rails.application.routes.draw do

 
  devise_for :users, skip: [:passwords], controllers: {
  registrations: "public/registrations",
  sessions: 'public/sessions'
}

 scope module: :public do

   root to: 'homes#top'

   get 'about' => 'homes#about'

   get 'users' => 'users#index'
   get 'users/mypage/:id' => 'users#show', as: 'users_mypage'
   get 'users/:id/edit' => 'users#edit', as: 'edit_user'
   patch 'users/:id' => 'users#update', as: 'update_user'

   resources :trip_articles do
     resources :comments, only: [:create, :destroy]
   end

show.html

<% @trip_article.comments.each do |comment| %>
    <p><%= image_tag comment.user.get_image(30,30) %></p>
    <%= comment.user.nickname %>
    <%= comment.created_at.strftime('%Y/%m/%d') %><%= @trip_article.comment %>
    <% if comment.user == current_user %>
      <%= link_to "削除",  trip_article_comment_path(@trip_article.id,comment.id), method: :delete, "data-confirm" => "本当に削除しますか?" %>
    <% end %>
<% end %>

<%= form_with model: [@trip_article, @comment], local: false do |f| %>
    <%= f.text_area :comment, rows: '5', placeholder: "コメントをここに" %>
    <%= f.submit "送信する" %>
<% end %>

Trip_article.rb

class TripArticle < ApplicationRecord

  has_one_attached :image
  belongs_to :user
  has_many :comments, dependent: :destroy

User.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

has_one_attached :image
has_many :trip_articles
has_many :comments, dependent: :destroy

Comment.rb

class Comment < ApplicationRecord

  belongs_to :user
  belongs_to :trip_article
  belongs_to :admin
  validates :comment, presence: true, length: { maximum: 300 }
end

class Public::TripArticlesController < ApplicationController

def show
     @trip_article = TripArticle.find(params[:id])
     @comment = Comment.new
  end

 private

  def trip_article_params
    params.require(:trip_article).permit(:title, :text, :image, :user_id, :comment)
  end

end

自分で試したこと

コントローラやviewファイルのルートパスの確認、ルーティングの確認、パラメーターの確認をしましたが
解決できません。

0

1Answer

デバッグステートメント (puts、logger、または binding.pry) などの Rails 開発ツールを使用して、データフローを検査し、コメント送信プロセス中に発生する問題を特定します。コメント機能に関連するエラー メッセージや警告がないかサーバー ログを確認してください。

0Like

Comments

  1. @coooco

    Questioner

    byebugで確認したところコメントを投稿した後にrollbackのエラーが出ていて正常にセーブができていないみたいでした。

  2. @coooco

    Questioner

    自己解決しました。admin側でアソシエーションを削除したら解決しました。

Your answer might help someone💌