woshidan's loose leaf

ぼんやり勉強しています

Railsのuniquenessバリデーションについて

uniquenessバリデーションを使うと、その項目の中で一意であるようにバリデーションがかけられます。

class User
  validates :email, uniqueness: true
end

とすると、emailはUserの中で一意となるようにRails側でバリデーションをかける。

これを、Userが会社に属していて会社の中で一意になるようにバリデーションをかけようとすると

class User
  validates :email, uniqueness: { scope: :company_id }
end

のように、scopeを使って、一意になる範囲を指定する。これをさらに、(例がいいかは少しおいておいて)会社の中で複数の部署に属するユーザはその都度User登録しようとかいう話になって、ある会社のある部署の中で一意というのが書きたいときは、

class User
  validates :email, uniqueness: { scope: [:company_id, :group_id] }

のように、scopeに配列を渡す形となります。

参考

railsguides.jp

310nae.com