ブックマークを一回限りにするには?
scopeオプションで、一意性チェックの範囲を絞り込む属性を指定する。
class Bookmark < ApplicationRecord belongs_to :user belongs_to :article validates :user_id, uniqueness: { scope: :article_id } end
一つのarticle_idでレコードを絞り込み、その中でuser_idのuniquenessを検証するイメージ。ユーザーと記事の組み合わせが一意になるので、あるユーザーがある記事をブックマークできるのは一回限りになる。
scopeで範囲を限定しない場合、ユーザーはすべての記事のうち一つしかブックマークできなくなる。