はじめに
オリジナルアプリでいいね機能の実装に取り掛かっています。
そのとき初めて出てきた記述があったのでアウトプットしていきます。
validates_uniqueness_of
いいね機能の実装のためにlikeモデルを作成しました。
like.rb
class Like < ApplicationRecord
#アソシエーション
belongs_to :user
belongs_to :review
validates_uniqueness_of :review_id, scope: :user_id
end
userは1つの投稿に対して1つしかいいねをつけられないようにするためにバリデーションを記述しました。
validates_uniqueness_ofによって属性の値が一意であることをバリデーションが成立します。
.rb
validates :review_id, uniqueness: true
しかしこのような記述では1つの投稿に対して1つしかいいねが押せないことになってしまいます。
そのためにscopeを使って、範囲を指定して、一意かどうかを判断します。