Railsのvalidatesとは?事例付き解説でvalidatesを徹底理解!

Ruby on Railsを学習していると、validatesというメソッドを目にすることになると思います。

本記事では、Ruby on Rails(以下Rails)におけるvalidatesメソッドについて、Rails初心者の人でもわかるように丁寧に解説します。

本記事で学習できる内容は、Railsのvalidatesとは何か・validatesの書き方と使い方についてです。

全ての項目で具体的なソースコードで解説しているので、わかりやすい内容となっております。

また、validatsには多くの種類があります。本記事では、よく使われる重要なvalidatesもいくつか紹介します。

本記事を読むだけでRailsのvalidatesの基礎をマスターできること間違いなしです。ぜひ最後までお読みください。

公開日:2016年7月2日

validatesとは?

まず、validatesとは何かについて述べます。validatesはメソッドの1つで、バリデーションを設定する時に使用します。では、バリデーションとは何なのでしょうか?

例を挙げて解説します。例えば、日用品の情報を扱うデータベースのテーブルを考えてみます。

この時、テーブルのカラム(列)には商品番号・商品名・価格・発売日が設定されているとします。

ここで、テーブルのレコード(行)では、必ずデータの型(整数や文字列など)が決まっています。

なので、レコードをテーブルに保存する時には、値が正しいかどうかの検証が必要になります。この検証を簡単にこなすのがRailsに用意されたバリデーション(validatesメソッド)です。

validates解説画像1

「フォームなどから入力された値を調べ、値が適切かどうかを調べて間違っていたらエラーメッセージを出す」という一連の流れは以下のようになります。(電話番号を例に考えてみました)

validates解説画像2

図にするとわかりやすいのではないでしょうか?validatesの役割が大体理解できたでしょう。次からは、validatesの書き方や具体例を解説します。

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

validatesの書き方と具体例

では、validatesメソッドの書き方と具体例を学習していきましょう。

validatesメソッドの引数には、モデルの属性名の前に「:」を記述します。

その後にハッシュで「バリデーションの種類: true」を並べれば、その種類のバリデーションが行われます。

属性名もバリデーションの種類も複数並べることができます。

validatesメソッドは、Railsアプリケーションフォルダのapp/models/◯◯.rbにソースコードを記述します。

【validatesの書き方:例1】

validates :number, :name, presence: true

※背番号(number)属性と名前(name)属性に「presence: true」を指定することで背番号と名前に「空を禁止(値を必ず入れなければいけない)」という制限を加えた。

presence: trueにより、フォームなどで背番号(number)と名前(name)を空欄にすると、エラーになるということです。

また、「バリデーションの種類: { オプション: オプションの値 }」とすると、バリデーションごとにオプションを指定できます。

【validatesメソッドの書き方:例2】

validates :name, length: { maximum: 20 }

※「名前(name)属性に20文字以下(最大20文字)」という制限を加えた。

以上がvalidatesの基本的な書き方です。validatesメソッドにはpresenceやlengthなどの他にも多くの種類があります。

以下からは、とてもよく使用するvalidatesの種類を紹介していきます。

よく使うvalidatesの種類

上記で紹介したvalidatesの他に、どんな種類のvalidatesがあるのでしょうか?

ここでは、とてもよく使うvalidatesの種類をいくつか紹介します。

numericality

validatesの種類の1つにnumericalityというのがあります。

numericalityは、整数であるかどうかや、指定値以上(以下・未満・等しい)かどうかなどを検証できます。

背番号(number)という属性に、「1以上100未満の整数」という制限を加えてみます。

【validates:numericalityの例】

validates :number,

numericality: { only_integer: true,

greater_than: 0, less_than: 100

}

「only_integer: true」を使うと、「整数のみ」という制限を加えることができます。

uniqueness

uniquenessは、重複を禁止することができます。

例えば、背番号(number)という属性で、数字の重複を禁止するためのソースコードを記述してみます。

【validates:uniquenessの例】

validates :number, uniqueness: true

背番号が10のユーザーが2人いては困る場合にはuniquenessを使いましょう。

format

faromatは、半角英数字などの指定ができます。

名前(name)属性に、半角英数字のみ、文字列の先頭はアルファベットという制限を加えてみます。

【validates:formatの例】

validates :name,

format: { with: /\A[A-Za-z]\w*\z/ }

※windowsでは、\は¥と入力してください。

※formatの書き方についてはプログラミング言語Rubyの正規表現の知識が必要です。本記事ではRubyの正規表現については割愛させて頂きます。

いかがでしたか?Railsのvalidatesについて理解できましたか?

Railsでアプリケーションを作成するときには、必ずと言っていいほどvalidatesメソッドを使用することになるでしょう。validatesの書き方を忘れた時は、ぜひ本記事でvalidatesを見直してください。

Udemyおすすめ講座

はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう

はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう

4.4(1,879 件の評価)

13,495 人の受験生

作成者: 中村 祐太 Yuta Nakamura(ウェブ開発, 生成AI, ChatGPT, AWS)
Proglus (プログラス)(プログラミング入門)

Rails7対応。汎用性が高くPythonやPHPと同様に人気のある Rubyを使ってWebアプリケーション開発に挑戦しよう。基礎からAWSでの開発環境構築、Renderを使ってインターネットに公開するまでを体系的に学べる

\無料でプレビューをチェック!/

講座を見てみる

評価:★★★★★
説明がわかりやすくRuby on railsの基礎と概要をしっかりと学ぶことができました。
一つの動画が短くタイトルで内容がわかるので、後から確認する際にとても役に立っています。
ありがとうございました。

評価:★★★★★
HTML・CSS・JavaScript・Ruby等Progateで一通りやってから受講しましたが、一度はつまづいてしまったRailsを使った学習をとりあえず最後までやることが出来ました。動画の最後にもありましたが完成したアプリを自分なりに編集したりして学習を続けたいと思います。