バリデーター

正しいとは思わないけれど、結果だけ。
 

Rails2系
class Hoge < ActiveRecord::Base
  validates_presence_of :name
  validates_format_of :booked_day, :with=>/\d{4}-\d{2}-\d{2}/

protected
  def validate
    errors.add(:name, "空欄なんて絶対に許さない!") if name.empty?  
    unless booked_day.blank?
      errors.add(:booked_day, "未来の日付は登録できません") if booked_day > Date.today
    end
  end
end

こんな感じで動いていた。
 

Rails3.1
#encoding: utf-8
class Hoge < ActiveRecord::Base
  validates :name, :presence => true
  validates :booked_day, :presence => true, :format =>{:with=>/\d{4}-\d{2}-\d{2}/}
  validate :params_check
  private
  def params_check
    errors.add(:name, "空欄なんて絶対に許さない!") if name.empty?  
    errors.add(:booked_day, "「受付日」は未来を登録できません") if booked_day > Date.today
  end
end

こんなカタチにしたら検証してくれるようになった。うーん・・・