11
9

【Rails】バリデーションのuniqueness: trueについて

Last updated at Posted at 2023-12-17

はじめに

お疲れさまです!
おおくまです!

今回は、Ruby on Railsのバリデーションのuniqueness: trueについてです!
基礎的なことなのですが、備忘録として残したいと思います!

注意点

内容に誤りがある場合があります!
コメント等で教えていただけると幸甚です!

環境

Ruby 3.2.2
Rails 7.0.6

バリデーションとは

バリデーションとは、Ruby on RailsActive Recordに搭載されている正しいデータだけをデータベースに保存するための機能です!

一般に利用可能なビルトインヘルパーが用意されており、

  • presnce:指定された属性が空でないことをバリデーション
  • numericality:指定された属性に数値のみが使われていることをバリデーション
  • length:指定された属性の値の長さをバリデーション

などがあります!

また、独自のバリデーションメソッドも作成できるようになっています!

バリデーションヘルパーカスタムバリデーションについては、こちらの記事が分かりやすかったです!

uniqueness: trueについて

様々な種類があるバリデーションヘルパーの中から、今回はuniqueness: trueに注目していきたいと思います!

このようなデータベース設計を例に、バリデーションを考えていきたいと思います!

uniqueness: trueとは

このバリデーションヘルパーは、オブジェクトが保存される直前に、属性の値が一意であり、重複していないことバリデーションします!

app/models/user.rb
class User < ApplicationRecord
  validates :email, uniqueness: true
end

このように書くことで、バリデーションが機能し、同じメールアドレスがデータベースに登録されなくなります!
このバリデーションヘルパーのデフォルトのエラーメッセージは「has already been taken」ですが、カスタマイズすることもできます!

app/models/user.rb
class User < ApplicationRecord
  validates :email, uniqueness: { message: "同じメールアドレスは使えませ〜ん" }
end

このように書くことで、入力フォームなどに任意のエラーメッセージを表示させることができます!

応用的な使い方

最近学んだ、個人的に目から鱗だった使い方をご紹介します!

app/models/post.rb
class Post < ApplicationRecord
  validates :user_id, uniqueness: { message: '1人1つしか投稿できませ〜ん' }
end

外部キーであるuser_iduniquenessヘルパーをつけることによって、1人1つしか投稿できないように制限することができます!

使うことは少ないかもしれませんが、私は先日実装する機会がありました!
すぐにこのような使い方が浮かばなかったので、頭の片隅に入れておくと、役に立つかもしれません!

さいごに

本記事が何かのお役に立てれば幸甚です!
最後まで読んでいただきありがとうございました!

11
9
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
11
9