railsでコメントに対してのいいね機能の実装
投稿に対するコメントへの評価機能を実装したい
現在railsで悩みを投稿するアプリを開発しており、その悩みについてコメントと共感ボタン(いいね機能)を実装したのですが、コメントに対して悩みを投稿したユーザーが評価(参考になったなど)できるようにコメントに対してもいいね機能のような実装ができればいいと考え実装中なのですが、実際にブラウザで表示するとエラーが起きてしまいます。
今回実装したいビューはこちら
上記のように自由に投稿した悩み(上記テキストはテストなので適当ですが)に対してエール(ただのコメント機能)を既に実装しており、そのコメントに対して悩みの投稿主が評価できる機能を実装したく開発中です。
各々事前準備はこんな感じ
まずはいいね機能同様モデル(今回はgoldモデル)をrails gで作成し各々userとyellに対してreferenceを記述
class CreateGolds < ActiveRecord::Migration[6.0]
def change
create_table :golds do |t|
t.references :yell, null: false, foreign_key: true
t.references :user, null: false, foreign_key: true
t.timestamps
end
end
end
その後migrateした後にモデルを記述
class Gold < ApplicationRecord
belongs_to :yell
belongs_to :user
validates_uniqueness_of :yell_id, scope: :user_id
end
ルーティングはこんな感じ
resources :lives, only: [:index, :new, :create, :show] do
collection do
get 'search'
end
resources :likes, only: [:create, :destroy]
resources :yells, only: [:index, :create] do
resources :golds, only: [:create, :destroy]
end
end
長ったらしいですがlivesが投稿でそこにいいね機能としてyellsがネストしておりさらにそこにgoldsという評価機能のためのルーティングを記述しております。
goldsコントローラーはこんな感じ
class GoldsController < ApplicationController
before_action :authenticate_user!, only: [:create, :destroy]
def create
@gold = current_user.golds.create(yell_id: params[:yell_id], life_id: params[:life_id])
redirect_back(fallback_location: root_path)
end
def destroy
@gold = Gold.find_by(yell_id: params[:yell_id], user_id: current_user.id)
@gold.destroy
redirect_back(fallback_location: root_path)
end
end
上記ではいいね機能実装の際のコーディングを参考にしているためおそらくここで問題があるように考えているものの具体的には分からず、、
エラー文としてはこんな感じ
該当するソースコードがこちら
<div class='yells-box'>
<div class="yell-lists">
<% @yells.each do |yell| %>
<div class="yell-content">
<%= yell.content%>
<%= yell.created_at.strftime("%m") %>月<%= yell.created_at.strftime("%d") %>日
</div>
<% if current_user.id == @life.user.id %>
<%= button_to life_yell_golds_path(yell.id), class: "box-icon" %>
<% end %>
<% end %>
</div>
<%= form_with model: [@life, @yell], class: 'yell-form', id: "form", local: true do |f| %>
<div class="form-input">
<%= f.text_field :content, class: 'form-yell', placeholder: '相手を思いやるエールを送りましょう!', id: "content" %>
</div>
<%= f.submit '送信', class: 'yell-submit', id: "submit" %>
<% end %>
</div>
ちなみに問題がある箇所が上記9行目
自分の仮説
僕としては投稿に対するいいね機能は問題なかったため手順としては上記のような流れで問題ないかとは思うのですが、
パスの指定でIDを指定するあたりに問題があると仮説を立てました。
ただそこからなかなか作業が進まず、、、、
皆様お忙しいとは思いますがお分かりになる方いらっしゃいましたらどうぞよろしくお願い致します。