【開発現場で使える!】Ruby on RailsでのValidationの使い方

サービス開発では必須となるValidation。Ruby on RailsでのValidation(バリデーション)の使い方について解説しています。今すぐ現場でも使える技術でしょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

普段サイトなどで会員登録をする際に「パスワードは最低8文字以上でなければなりません」といった文言をよく見るかと思います。

こういった制約をRubyのフレームワークのRailsではValidation(バリデーション)という仕組みで用意することができます。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回はバリデーションについて説明するよ。

大石ゆかり

田島メンター!!バリデーションというのは何ですか〜?

田島悠介

バリデーションは、ある値に対して指定した条件に当てはまるかどうかというのを検証するものだよ。例えばメールアドレスが正しく入力されているかとか、パスワードの文字は8文字以上であるかとかだね。

大石ゆかり

なるほど、実際によく見るやつですね。ぜひ覚えておきたいです!

 

Validationとは

Ruby on Railsには、ユーザが入力した値を検証する為にValidationという仕組みがあります。

例えば入力必須の項目や、最低何文字以上入力必須などの制約を設ける際に利用します。

またコーディングしていく際は、DBに情報を保存する前に検証するためModelに記載します。

 

実際にValidationを使ってみよう

例えば、Userモデルに関する場合は、「app/models/user.rb」というファイルにValidationを設定します。

以下では、実際にValidationを設定してブラウザ上でどのように表示されるのか解説していきます。

 

入力必須にする

例えばユーザ作成時のユーザ名など、必ず入力しなければいけない項目に対してはpresenceオプションを設定してみます。

fa90b5ec926c58343b621498b7062297

この状態でnameを空でユーザ作成しようとするとエラーが表示されます。

1f2960efe796ace692829e3c6f7c0b87

 

田島悠介

一番シンプルな例で見てみようか。これは名前の欄が空白の場合エラーメッセージを出すようにしたものだよ。presenceというのは「空白でない場合にtrue」となるものなんだ。

大石ゆかり

逆に言うと、空だった場合はfalseとなるわけですね。

田島悠介

そうだね。他にも色々なバリデーションの例を見てみよう。

 

重複不可にする

ユーザ名の重複を許したくない場合にはuniquenessオプションを設定します。

d048025cb71feadc227bd6da27bd9afa

先ほどのpresenceオプションも残したままuniquenessオプションを追加することが可能です。

重複のテストをするために予めsampleというユーザを作成してから確認します。

9cfefd12918b94c349f7e560d6a8b448

新たにsampleというユーザ名でユーザを作成しようとするとエラーが表示されます。

71c465045eed83e28b8d7c234757ec94

 

文字数に制限を設ける

例えば最小文字数や最大文字数を設定することができ、その文字数に達していない場合、超えている場合はエラーが表示されます。

文字数に制限を設ける場合にはlengthオプションを使用します。

最低文字数の制約を設ける場合はminimum属性を指定して設定します。

74620c5fcab81f7b6b9f76510c7ccb8b

 

minimum属性は設定した文字数以上の文字数でなければエラーが発生します。

今回は3を設定してありますので3文字以上の文字数でない場合にはエラーが表示されます。

d2d5f65ce23a5070a7a4e7f7751375f2

 

最大文字数の制約を設ける場合にはmaximum属性を指定して設定します。

3bf1c28f5cc06f3e23f8f58fea31b329
maximum属性は設定した文字数以下の文字数でなければエラーが発生します。

今回は8を設定してありますので8文字以下の文字数でなければエラーが発生します。

8bfc797d3d09ab86897e772bf89f2101

また、lengthオプションの属性については同時に設定することが可能です。

最低◯◯文字以上〜最大◯◯文字以下という指定をすることが出来ます。

f7383d55105a29aaa5269a6866d0c1b6

 

上記の例の場合は、最低3文字以上 最大8文字以下で入力しないとエラーが発生します。

 

数値の制限する

ユーザ名以外に年齢を入力してもらうために年齢を入力するフォームを新設しました。

4089d1cf71c1333ed235a9e5194c3faa

例えば18歳以上でなければエラーを発生させるにはどのように設定すればよいでしょうか?数値の制限を行うにはnumericalityオプションを使用します。

17cfc46930ddcbeb56dba9a7a688015a

 

greater_than_or_equal_toという属性は文字通り、設定した値と等しいまたは大きい場合のみ許可する属性です。

b5689ea2a7b92d22b3057bca5ccaf243

 

以上、Validationの設定方法を紹介しました。

SNSのような会員登録が必要なサービスでは、Validationが必須となります。

ぜひ現場でも使えるように覚えておきましょう。

 

田島悠介

代表的なバリデーションを紹介したよ。

大石ゆかり

よく見ると、それぞれの条件でちゃんとエラーメッセージが対応したものになっていますね。

田島悠介

これは元々デフォルトのエラーメッセージが用意されていて、それが表示されているんだ。非常に多くのデフォルトメッセージがあるけれど、全て公式のガイドで確認することができるよ。

大石ゆかり

そんなところまで準備されているんですね。また調べてみます!

 

[お知らせ]TechAcademyでは初心者でも8週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。RubyでWebアプリを開発したい方はご参加ください。