Railsの検証機能 Vaidation

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

6-1.入力時の検証機能を追加
それぞれの項目に対し様々な検証機能を対象モデルに付加します。


/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{2}-\d{4}-\d{4}|\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+$」とは最初から数字が続いて最後までという正規表現


6-2.実行
すべてのフィールドを空白のまま新規登録してみましょう。

入力項目の内容がチェックされ、該当するエラーメッセージが表示されます。

6-3.エラー表示の色の変更
標準では赤色でエラーの箇所が表示されますが、アプリケーションによっては他の色に変えたいことがあるかもしれません。このような場合はscaffoldのスタイルシートを変更します。


/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 */
}

#errorExplanation p {
color: #333;
margin-bottom: 0;
padding: 5px;
}

#errorExplanation ul li {
font-size: 12px;
list-style: square;
}

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

テーブル保守アプリケーションの改良 | index | i18nによる日本語化