Railsの検証機能

1.検証機能の追加

入力項目に対し桁数チェックであるとか、ニューメリックチェックであるとか様々なチェックを行うことが多いが、Railsにはこれらの検証機能としてvaildationが用意されています。
プロジェクトproj001を実例として取り上げ検証機能を付加してみましょう。
app/models/address.rbを編集します。

/app/models/address.rb

class Address < ActiveRecord::Base
 validates_presence_of :namae
 validates_uniqueness_of :namae
 validates_length_of :namae, :maximum => 12
 validates_presence_of :yubin
 validates_length_of :yubin, :within => 3..8
 validates_presence_of :jusho
 validates_presence_of :denwa
 validates_format_of :denwa, :with => /\d{3}-\d{3}-\d{4}|\d{4}-\d{2}-\d{4}/

end

意味はつぎの通りです。


■ validates_presence_of :namae, :yubin, jusho, denwa
指定されたフィールドは必須項目。未入力ならエラー。
検証フィールド名は、カンマで区切って複数指定できる。


■ validates_uniqueness_of :namae
データベースのテーブルのnamaeフィールドの値と重複していなければOK。重複していたらエラー。


■ validates_length_of :namae, :maximum => 12
最大12文字までOK。12文字を超えたらエラー。


■ validates_length_of :yubin, :within => 3..8
3文字から8文字までOK。それ以外はエラー。


■ validates_numericality_of :kakaku
数値の入力であればOK。数値に変換できない文字列はエラー。


■ validates_format_of :denwa, :with => /\d{3}-\d{3}-\d{4}|\d{4}-\d{2}-\d{4}/
数字3桁−数字3桁−数字4桁または数字4桁−数字2桁−数字4桁ならOK。異なっていればエラー。
正規表現を利用すれば、相当広範囲なことが検証可能になる。


このほかにも様々な検証が用意されているが、実用的なものを紹介します。


■ validates_confirmation_of :password
入力確認用のチェックフィールドで、_confirmation というアクセサが自動生成される。


■ validates_format_of :email, :with => /[^@]+@[^@\.]+\.[^@\.]+/
メールアドレスのチェック。


■ validates_exclusion_of :password :in => /^\d+$/, :message => '数字のみは危険です'
指定された値の範囲外はエラー。メッセージを表示する。
「^\d+$」とは最初から数字が続いて最後までという正規表現

2.実行
すべてのフィールドを空白のまま新規登録してみましょう。
エラーメッセージが表示されます。
    


3.エラー表示の色変更

標準では赤色でエラーの箇所が表示されますが、アプリケーションによっては他の色に変えたいこともあります。
・/public/stylesheets/scaffold.cssを変更します。

/public/stylesheets/scaffold.css

body { background-color: #fff; color: #333; }


body, p, ol, ul, td {
 font-family: verdana, arial, helvetica, sans-serif;
 font-size: 13px;
 line-height: 18px;
}


pre {
 background-color: #eee;
 padding: 10px;
 font-size: 11px;
}


a { color: #000; }
a:visited { color: #666; }
a:hover { color: #fff; background-color:#000; }


.fieldWithErrors {
 padding: 2px;
 background-color: #87CEEB; /* <1>エラーしたフィールドの背景色 default: red */
 display: table;
}


#errorExplanation {
 width: 400px;
 border: 2px solid #87CEEB; /* <2>エラーメッセージのボックスの線の色default: red */
 padding: 7px;
 padding-bottom: 12px;
 margin-bottom: 20px;
 background-color: #f0f0f0; /* <3>エラーメッセージのボックス内の背景色default: #f0f0f0 */
}


#errorExplanation h2 {
 text-align: left;
 font-weight: bold;
 padding: 5px 5px 5px 15px;
 font-size: 12px;
 margin: -7px;
 background-color: #87CEEB; /* <4>エラーメッセージのタイトル行の背景色default: #c00 */
 color: #000000; /* <5>エラーメッセージのタイトル行の文字色default: #fff */
}

4.実行
色が変わったことが分かります。