スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Date型のvalidate

日付は直接validateできないから、before_type_castでvalidateする。

例えばcolumn名birthdayでDate系の型(OracleならDate型)に対応付けられているとすると、そのvalidateは

validates_format_of :birthday_before_type_cast, :with => /^([a-zA-Z]{3} [a-zA-Z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} \+[0-9]{4} [0-9]{4}|[0-9]{4}-[0-9]{2}-[0-9]{2})$/, :allow_nil => true

最初の

[a-zA-Z]{3} [a-zA-Z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} \+[0-9]{4} [0-9]{4}

はDBからモデルのbirthdayプロパティに読み込まれる場合のbefore_type_castの形。Timeオブジェクトの文字列表記で

Fri Nov 06 13:48:48 +0900 2009

みたいな形で入ってる。

その後の

[0-9]{4}-[0-9]{2}-[0-9]{2}

はWebのフォームから入力したものを受け取るときの形なので、アプリによって変えるところ。

このケースではhttp://hogehoge.com/appli/controller/action?model[birthday]=2010-01-01

みたいな入力でPOSTされることを想定している。

おかしな入力だった場合はnilが入ってる。

必須入力項目なら:allow_nilを外せばいい。

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/314-386b810a

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。