はじめに
お疲れさまです!
おおくまです!
今回は、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つしか投稿できないように制限することができます!
使うことは少ないかもしれませんが、私は先日実装する機会がありました!
すぐにこのような使い方が浮かばなかったので、頭の片隅に入れておくと、役に立つかもしれません!
さいごに
本記事が何かのお役に立てれば幸甚です!
最後まで読んでいただきありがとうございました!