今回は検証機能の使い方を紹介していきます。検証機能とはなんだろう?簡単に言うとユーザーが間違った情報を入力した場合、動作を止めたりエラーを表示したりするものです。
例えば『電話番号を入力してください』という入力フォームに数字以外を入力して保存できたら後々ユーザーや管理者が困りますよね。そうならないように予め、半角数字のみを入力できるように制限しておくなどといったものが検証機能になります。
他にも一意性があるか(すでに登録済みのデータではないか。メールアドレスやニックネームなど)、数字は指定された範囲内で入力されているか。からの値を保存していないかなどがあります。アプリケーションを作成する上でかなりの頻度で使用しますので、ここで覚えていきましょう。
主な検証機能一覧はこちら
検証名 | 検証内容 【パラメーター】 |
エラーメッセージ 【意味】 |
---|---|---|
acceptance | チェックボックスにチェックが入っているかどうか 【accept】 |
must be accepted 【チェック時の値(デフォルトは1)】 |
confirmation | 2つの値が等しいかどうか(2重検証) 【ー】 |
doesn’t mach confirmation |
exclusion | 値が配列/範囲に含まれていないか 【in】 |
is reserved 【比較対象の配列または範囲】 |
inclusion | 値が配列/範囲に含まれているか 【in】 |
is not included in the list 【比較対象の配列または範囲】 |
format | 正規表現パターンに合致しているか 【with】 |
is invalid 【値が規定に則っていない】 |
length | 文字列の長さ(範囲など)をチェック 【minimum】 【maximum】 【in】 【tokenizer】 【is】 【too_long】 【too_short】 【wrong_length】 |
is too short(minimum is xxx charactersなど) 【最小の文字列長】 【最大の文字列長】 【文字列長の範囲】 【文字列の分割方法】 【文字列長(長さが完全に一致していること)】 【maximumに違反した時のメッセージ】 【minimumに違反した時のメッセージ】 【isパラメーターに違反した時のエラーメッセージ】 |
numericality | 数値の大小/型のチェック(チェック内容はパラメーターで指定可) 【only_integer】 【greater_than】 【greater_than_or_equal_to】 【equal_to】 【less_than】 【less_thane_qual_to】 【odd】 【even】 |
is not numberなど 【整数であるか】 【指定値より大きいか】 【指定値以上か】 【指定値と等しいか】 【指定値未満か】 【指定値以下か】 【奇数か】 【偶数か】 |
presence | 値が空でないか | can’t be empty |
adsence | 値が空であるか | must be blank |
uniqueness | 値が一意であるか 【scope】 【case_sensitive】 |
has already been taken 【一意性制約を決めるために使用する他の例】 【大文字小文字を区別するか】 |
この表ではおおまかにこのような制限が行えるということを知っておけばOKです。ここから先は一つずつどんなときに用いるのか。具体的なコードも交えて解説していきます。そこまで難しいことではないのですぐに理解できますよ。ここでは全てを解説しているわけではないので書き方の参考程度にしていただけると幸いです。
acceptance【受諾検証】
この検証機能は例えばチェックボックスにチェックされているかどうか、利用規約を読んで『同意する』が選択されているかどうかなどの時に使用できます。
具体的なコードの書き方は以下の通り
hoge.rb |
---|
class Hoge < ApplicationRecord validates :agreement, acceptance: true end |
※hogeの部分は自分のアプリで使用している名前に変更してください。
:agreementは同意するかどうかのチェックボックス相当のキーです。ビューのチェックボックスは別途用意して頂く必要があります。ビューに関しては正解はありませんが念の為、参考までにどうぞ。
hoges/_form.html.erb |
---|
<div class= “hoge”> <%= f.label :agreement %><br/> <%= f.check_box :agreement %> </div> |
※hogeの部分は自分のアプリで使用している名前に変更してください。
このコードでチェックボックスにチェックを入れていなかった場合、falseとして値が返されます。false用のビューを用意していない場合はエラーが表示されると思います。
confirmation【同一性検証】
この検証機能はパスワードの設定をする時にもう一度同じパスワードを入力してくださいといったような2重の検証を行う時に使用します。
具体的なコードの書き方は以下の通り
hoge.rb |
---|
class Hoge < ApplicationRecord validates :email, confirmation: true end |
※hogeの部分は自分のアプリで使用している名前に変更してください。
これでemailは2重検証を行い2つの値が同一である場合trueとなるというものになります。ここで同一でない場合はエラーが生じるように設定しています。emailの部分をpasswordにすることも可能です。
uniqueness【一意性検証】
この検証ではデータベースに同じ内容のものが存在しているかどうかを検証することができます。例えば同じニックネームを使用できないようにしたり、同じメールアドレスは使用できないといったような重複するものにはエラーを表示させる場合に使用します。
具体的なコードの書き方はこんな感じです。あくまで一例と考えてください。
hoge.rb |
---|
class Hoge < ApplicationRecord validates :email, uniqueness: {scope: :hoge} end |
これでhogeテーブルのhoge列に重複するemailがあればエラーとして表示されます。このhoge部分をタイトルやパスワードに変えることで様々な検証をすることができます。さらにhoge列の部分を変更することで任意の列を指定することができます。
コメント