[Ruby on Rails] 日付・時刻のバリデーションなら「ValidatesTimeliness」
- 2013 2/18
Ruby on Rails で、日付・時刻のバリデーションをするなら ValidatesTimeliness という gem がおすすめです。
ActiveRecord だけでなく Mongoid でも使えるみたい。
・adzap/validates_timeliness · GitHub
validates_timeliness gem をインストール後、日本語のエラーメッセージを最低限、設定します。
# config/locales/model.ja.yml ja: activerecord: errors: messages: invalid_date: は正しい形式で入力してください。 invalid_time: は正しい形式で入力してください。 invalid_datetime: は正しい形式で入力してください。 |
基本的な設定はこれだけで、あとはモデルに validates_datetime とかでバリデーションを設定できます。
# app/models/article.rb class Article < ActiveRecord::Base validates_datetime :published_at validates_date :published_date validates_time :published_time end |
日付や時刻のバリデーションフォーマットがデフォルトのものだけでは、足りない場合は、独自定義したフォーマットを追加することもできます。
Plugin Parser を config.use_plugin_parser = true でONにして、config.parser.add_formats で追加するだけです。
# config/initializers/validates_timeliness.rb ValidatesTimeliness.setup do |config| config.use_plugin_parser = true config.parser.add_formats(:time, "%H:%M") end |
上記は、Time に「01:23」みたいなフォーマットも許可する設定です。
もっと詳しい情報はWikiを見てください。
・Plugin Parser · adzap/validates_timeliness Wiki
ValidatesTimeliness は、Date/time parser に timeliness を使ってるので、デフォルトのフォーマットは timeliness のページから確認できます。
・timeliness/README.rdoc at master · adzap/timeliness · GitHub
ValidatesTimeliness 便利ですね。
日付や時刻のフォーマットって普遍だと思うので、Railsにデフォルトで搭載されていても良さそうなのに何でないんでしょうね?