コメントに対していいね機能を実装したい
コメントに対していいね機能を実装したい
railsで悩みを投稿するアプリを作成しているのですが、投稿に対するコメントに投稿主のみが評価できる機能(いいね機能)を実装しているのですが、そのボタンをクリックした後にエラーが起きて困っています。
各々コードはこんな感じ
class Gold < ApplicationRecord
belongs_to :yell
belongs_to :user
validates_uniqueness_of :yell_id, scope: :user_id
end
上記はコメントに対する評価モデル。
ユーザーとエール(コメント)とのアソシエーションを記述そしてここで気づいたのですが、
この段階で評価をコメントとユーザーにしかアソシエーション記述していないのが問題なのでしょうか?(コメントは投稿に対して行うため投稿に対しても評価モデル(上記Goldモデル)でアソシエーションを書かないといけない?
またデータベース自体も同じように
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
と投稿に関して記述していません。また投稿コントローラのshowアクションは以下のような記述
(今回実装したいビューが投稿のshowのため)
def show
@life = Life.find(params[:id])
@lives = Life.all.order("created_at DESC")
@like = Like.new
@yell = Yell.new
@yells = @life.yells
@gold = Gold.new
end
細かく説明すると今回の評価が@goldで投稿に対するいいね機能が@like
また評価であるgold controllerは以下のような記述
class GoldsController < ApplicationController
before_action :authenticate_user!, only: [:create, :destroy]
def create
@gold = current_user.golds.create(life_id: params[:life_id], yell_id: params[:yell_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="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(@life, yell), method: :post %>
<% 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>
すみません💦色が見にくいですがフォームウィズを用いて投稿に対してyell(コメント)を記述し、そのコメントを上記each文で出力しています。
その出力されたコメントへ評価ボタンを実装したいのですが、うまくいかず、、、、
自分で試したこと
実は最初はビューを表示する時点でエラーが起きQiitaのユーザー様に助けて頂いたのですが、その後はボタンを押すとエラーが起きてしまい、、、
おそらく最初に仮設していた評価モデルのアソシエーションに投稿モデルも紐づけないといけないのかと感じていますが、もしわかるかたがいらっしゃればお願い致します。