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

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

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

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

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

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

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

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

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を見直してください。