Rails - allow_nilを使用する際の注意

フォームで指定された形式で入力してほしいけど必須入力項目では無いとき
validates_format_ofで未入力を許可しようと思ってもallow_nilではできない

validates_format_of :url, 
  :with => /[0-9A-Za-z_\/\-\.\:]/,
  :message => "が不当な形式です",
  :allow_nil => true

フォームで未入力だった場合は空文字として扱われるのでallow_nilでは通過できない

ifオプションを使って指定するらしい

validates_format_of :url, 
  :with => /[0-9A-Za-z_\/\-\.\:]/,
  :message => "が不当な形式です",
  :if => Proc.new{|record| !record.url.blank?}

ただRails2系からはallow_blankが実装されたので楽にできる

validates_format_of :url, 
  :with => /[0-9A-Za-z_\/\-\.\:]/,
  :message => "が不当な形式です",
  :allow_blank => true