has_manyのvalidateオプションが意味不明

Rails2.1.1からhas_manyにvalidateオプションが入ってるみたいですね.
いつの間に.
役割はvalidates_associatedと同じもの...では無いみたいです.

# activerecord-2.1.2/lib/active_record/associations.rb:1201
 def add_multiple_associated_validation_callbacks(association_name)
   method_name = "validate_associated_records_for_#{association_name}".to_sym
   ivar = "@#{association_name}"
 
   define_method(method_name) do
     association = instance_variable_get(ivar) if instance_variable_defined?(ivar)
 
     if association.respond_to?(:loaded?)
       if new_record?
         association
       elsif association.loaded?
         association.select { |record| record.new_record? }
       else
         association.target.select { |record| record.new_record? }
       end.each do |record|
         errors.add "#{association_name}" unless record.valid?
       end
     end
   end
 
   validate method_name
 end

if文の後のeach!!正気とは思えない所行ですね.
コードをよく読むとassociate先がnew_recordである場合のみvalid?を動かしてくれる様です.
つまり更新時にはassociate先のクラスのvalid?を起動してくれないんですね..
んん...意図が分かりません.
何でなんでしょうね..?
 
それと違う話ですが,validates_associatedと組み合わせているとエラーメッセージがひょこっと増えたりします.
二度associate先のvalid?が呼ばれるからなんですけど,これもレコードの登録時と更新時で動作が変わるのでちょっとやっかいですね.
 
ちなみにこの機能はデフォルトでtrueらしいので,使用しないためには明示的な宣言が必要です.

has_many :hoge, :validate => false

 
Railsのバージョンアップの際には気をつけてください.
# 正確にはActiveRecordかな.