LoginSignup
1
1

More than 1 year has passed since last update.

【uniqueness: scopeの使い方】ブックマーク、いいね機能実装に使える

Posted at

uniquenessとは

バリデーションの1つ。Railsで一意であることを示す。
scopeはuniquenessのオプション。

下記は人が投稿したものに対してブックマーク(いいね)機能を入れた時のmodel例。
1投稿に対して、1人のユーザーが1ブックマーク(いいね)しかすることができないため、このようなバリデーションになる。

models/bookmark.rb
class Bookmark < ApplicationRecord
  belongs_to :user
  belongs_to :board

  validates :user_id, uniqueness: { scope: :board_id }
end

もしscopeを付与せずにいると、

models/bookmark.rb
 validates :user_id, uniqueness: true

「1投稿」に対して「1ブックマーク(いいね)」しか付けることしか出来ず、早い者勝ちで一番最初に誰かがブックマーク(いいね)をしたら、それ以上その投稿にブックマーク(いいね)が付けれなくなる。

なのでブックマーク(いいね)機能搭載の時はuniqueness: scopeが必須と言える。
またuniqueness: scope配列にして複数指定ができる。

models/bookmark.rb
validates :user_id, uniqueness: { scope: [:group_id, :board_id] }

これでboard_id, group_id, user_id の全てが同じデータは1件しか作成できなくなる。

参考記事

【Rails】複数のカラムを使ったユニーク制約の方法【uniqueness: scope】

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1