⛓️
【Rails】uniqueness: scope を使ってユニーク制約を設定する
uniqueness:scopeとは?
scopeを使ったユニーク制約は、Active Recordの機能の一つで、特定のスコープ内で重複する値を持つレコードを防止する制約を設定することができます。
使い方
例えば、Userモデルにemailカラムがある場合、scopeを使ってemailカラムの値が同じであるレコードが複数存在しないようにすることができます。以下は、Userモデルにおけるemailカラムのユニーク制約を設定する例です。
class User < ApplicationRecord
validates :email, uniqueness: { scope: :account_id }
end
上記の例では、account_idスコープ内でemailカラムの値が重複するレコードが存在しないようになります。つまり、同じaccount_idを持つユーザーが同じメールアドレスを持つことができなくなります。
scopeは、複数のカラムに対して設定することもできます。例えば、以下のように複数のカラムを指定することができます。
class User < ApplicationRecord
validates :email, uniqueness: { scope: [:account_id, :active] }
end
上記の例では、account_idとactiveの両方が同じである場合に、emailカラムの値が重複するレコードが存在しないようになります。つまり、同じaccount_idかつactiveが同じ状態のユーザーが同じメールアドレスを持つことができなくなります。
参考資料
Discussion