Railsのモデルの機能を使ったバリデーションは便利だが、すでにリリースしたサービスにバリデーションを追加する場合、既にあちこちにそのモデルの更新処理があったりして、そこで全てバリデーションに引っかかるのは困る、という場合がある。
そんなときは、対処療法的だが、更新時にはバリデーションを掛けずに、新規作成時のみにバリデーションをかければ良い。これには、:on => :createオプションを使う。
以下は、:hoge属性を必須で、半角英数字のみにし、しかも、新規作成時(create)のときだけの設定方法。これをモデルに記述しておく。
class Hoge < ActiveRecord::Base validates_presence_of hoge, :on => :create validates :hoge, :format => { :with => /\A[a-zA-Z]+\z/, :message => "は半角英字で記入して下さい" }, :on => :create end
参考:Ruby on Rails Guides: Active Record Validations and Callbacks
注意、これはあくまで対処療法です。このやり方だけだと、新規作成後に空白で更新できてしまいます。絶対に必要なバリデーションの場合は、影響範囲がでかくても、onを使わずに根本解決すべきです。