libro
www.tuyano.com
初心者のためのRuby on Rails3入門

バリデーションによる値の検証 (2/5)

作成:2012-10-28 18:59
更新:2012-10-28 18:59

■バリデーションを設定してみよう

では、実際に簡単なバリデーションを設定してみましょう。先ほど作った「Lunch」モデルのスクリプト(「app」内の「models」内にある「lunch.rb」ファイル)を開き、下のリスト欄のように書き換えてみてください。

修正したら、 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のように、利用するために何らかの値を用意してやらないといけないものは、必要な値をハッシュにまとめておくのが一般的なのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

class Lunch < ActiveRecord::Base
  attr_accessible :genre, :memo, :name, :star
  
  validates :name, :presence => true
  validates :star, :numericality => { :only_integer => true }
end

※関連コンテンツ

「初心者のためのRuby on Rails3入門」に戻る