allow_nilの代わりにallow_blankを使えばいいよ

Railsのフォームのバリデーションで文字列を特定のフォーマットで入力して欲しいんだけど未入力はあり。

そんな時に使うのが:allow_nilというオプションなのだけど、このオプションをつけても空文字列は許してくれない(フォームに項目があると未入力でも空文字列が送られてくる)のでそのままでは使えずbefore_validationと組み合わせて使っていた。

validates_format_of :url, :with => URI.regexp(['http', 'https']), :allow_nil => true

def before_validation
  self.url = nil if self.url.blank?
end

でも2.0系からは:allow_blankが追加されて簡単になっていたようだ。

validates_format_of :url, :with => URI.regexp(['http', 'https']), :allow_blank => true

なんか勉強し直さないといけない気がしてきた・・・