概要
同じユーザーが、1つの投稿に対してのレビュー(評価)を永遠出来続けてしまう不具合を解消した方法について、紹介します。
→1投稿に対して1レビューしか出来ない状態にする。
結論
reviewモデルに以下のような、uniquness_ofのバリデーションを追加することで解決します。
app/models/review.rb
class Review < ApplicationRecord
belongs_to :user
belongs_to :definition
validates :score, presence: true
validates_uniqueness_of :definition_id, scope: :user_id # ←追加
end
バージョン
rubyのバージョン ruby-2.6.5
Railsのバージョン Rails:6.0.0
補足
validates_uniqueness_of :definition_id, scope: :user_id
validates_uniqueness_ofは唯一性を定めるためのバリデーションです。
scopeは範囲を定めます。
なので今回は、definition_idとuser_idの組み合わせが1通りしかないということになります。
この記述があるかぎり一意性が担保されるということです。
記事紹介
似たようなエラーを、いいね機能でも起こし、その解消例を以下に載せています。
よろしければご参考ください。
https://qiita.com/narimiya/items/c4480b17c07f7e1bbc61