⛓️
【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