バリデーションによる値の検証 (2/5)
作成:2012-10-28 18:59
更新:2012-10-28 18:59
更新:2012-10-28 18:59
■バリデーションを設定してみよう
では、実際に簡単なバリデーションを設定してみましょう。先ほど作った「Lunch」モデルのスクリプト(「app」内の「models」内にある「lunch.rb」ファイル)を開き、下のリスト欄のように書き換えてみてください。
修正したら、 http://localhost:3000/lunches/new にアクセスして、新しいレコードを作成しましょう。まず、フォームに何も入力しないで、すべてカラのまま送信してみてください。再びフォームが現れ、以下のようなエラーメッセージが表示されるはずです。
「Name can't be blank」は、nameの値がカラになっているというエラー、「Star is not a number」は、starの値には数字が入力されていなければいけないというエラーです。nameに適当な名前を、そしてstarに整数の値を記入すると、エラーは表示されず、送信した内容が保存されます。エラーが表示される間は、送信した内容がデータベースに保存されることはありません。
ここでは、2つのコラムにそれぞれ1つずつ、バリデーションを設定しています。これらはざっと以下のようになります。
・必須項目にする「presence」
・数字の入力を行わせる「numericality」
見ればわかるように、presenceでは値はtrueだけですが、numericalityではonly_integerという値を持ったハッシュになっています。バリデーションは、種類によってただ利用するだけのものや、必要な値を用意しなければいけないものもあったりします。それによって、設定する値の書き方も違ってくるのです。
presenceのように、ただ設定をするだけで、何の値も用意する必要のないものは、通常、単に「true」と値を用意すれば利用できるようになります。numericalityのように、利用するために何らかの値を用意してやらないといけないものは、必要な値をハッシュにまとめておくのが一般的なのです。
修正したら、 http://localhost:3000/lunches/new にアクセスして、新しいレコードを作成しましょう。まず、フォームに何も入力しないで、すべてカラのまま送信してみてください。再びフォームが現れ、以下のようなエラーメッセージが表示されるはずです。
2 errors prohibited this lunch from being saved:
Name can't be blank
Star is not a number
「Name can't be blank」は、nameの値がカラになっているというエラー、「Star is not a number」は、starの値には数字が入力されていなければいけないというエラーです。nameに適当な名前を、そしてstarに整数の値を記入すると、エラーは表示されず、送信した内容が保存されます。エラーが表示される間は、送信した内容がデータベースに保存されることはありません。
ここでは、2つのコラムにそれぞれ1つずつ、バリデーションを設定しています。これらはざっと以下のようになります。
・必須項目にする「presence」
:presence => 真偽値これは、カラの値を禁止するものです。:presenceの値は真偽値となり、trueを指定すると、必ず何らかの値が入力されなければならなくなります。
・数字の入力を行わせる「numericality」
:numericality => { :only_integer => 真偽値 }数字の入力だけを許可するものです。:numericalityの値はハッシュになっており、:only_integerという項目が用意されています。これは、整数のみの入力にするためのオプションで、trueにすると整数だけ入力可能になります。falseだと、整数以外(実数)の入力も許可されます。
見ればわかるように、presenceでは値はtrueだけですが、numericalityではonly_integerという値を持ったハッシュになっています。バリデーションは、種類によってただ利用するだけのものや、必要な値を用意しなければいけないものもあったりします。それによって、設定する値の書き方も違ってくるのです。
presenceのように、ただ設定をするだけで、何の値も用意する必要のないものは、通常、単に「true」と値を用意すれば利用できるようになります。numericalityのように、利用するために何らかの値を用意してやらないといけないものは、必要な値をハッシュにまとめておくのが一般的なのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
1 2 3 4 5 6 | class Lunch < ActiveRecord::Base attr_accessible :genre , :memo , :name , :star validates :name , :presence => true validates :star , :numericality => { :only_integer => true } end |
※関連コンテンツ