はじめに
お疲れさまです!
おおくまです!
今回は、Ruby on Rails
のバリデーションのuniqueness: true
についてです!
基礎的なことなのですが、備忘録として残したいと思います!
注意点
内容に誤りがある場合があります!
コメント等で教えていただけると幸甚です!
環境
Ruby 3.2.2
Rails 7.0.6
バリデーションとは
バリデーション
とは、Ruby on Rails
のActive Record
に搭載されている正しいデータだけをデータベースに保存するための機能です!
一般に利用可能なビルトインヘルパー
が用意されており、
-
presnce
:指定された属性が空でないことをバリデーション -
numericality
:指定された属性に数値のみが使われていることをバリデーション -
length
:指定された属性の値の長さをバリデーション
などがあります!
また、独自のバリデーションメソッドも作成できるようになっています!
バリデーションヘルパー
やカスタムバリデーション
については、こちらの記事が分かりやすかったです!
uniqueness: trueについて
様々な種類があるバリデーションヘルパー
の中から、今回はuniqueness: true
に注目していきたいと思います!
このようなデータベース設計
を例に、バリデーション
を考えていきたいと思います!
uniqueness: trueとは
このバリデーションヘルパー
は、オブジェクト
が保存される直前に、属性の値が一意であり、重複していないことをバリデーション
します!
class User < ApplicationRecord
validates :email, uniqueness: true
end
このように書くことで、バリデーション
が機能し、同じメールアドレスがデータベース
に登録されなくなります!
このバリデーションヘルパー
のデフォルトのエラーメッセージ
は「has already been taken」ですが、カスタマイズすることもできます!
class User < ApplicationRecord
validates :email, uniqueness: { message: "同じメールアドレスは使えませ〜ん" }
end
このように書くことで、入力フォームなどに任意のエラーメッセージ
を表示させることができます!
応用的な使い方
最近学んだ、個人的に目から鱗だった使い方をご紹介します!
class Post < ApplicationRecord
validates :user_id, uniqueness: { message: '1人1つしか投稿できませ〜ん' }
end
外部キー
であるuser_id
にuniquenessヘルパー
をつけることによって、1人1つしか投稿できないように制限することができます!
使うことは少ないかもしれませんが、私は先日実装する機会がありました!
すぐにこのような使い方が浮かばなかったので、頭の片隅に入れておくと、役に立つかもしれません!
さいごに
本記事が何かのお役に立てれば幸甚です!
最後まで読んでいただきありがとうございました!