By trial and error I seem to arrive to the conclusion that 1. Validation recurses through has_many by default and a root save! call raises an excepcion if some child no matter how nested is fails validation 2. Validation does not recurse through has_one by default and you can change this with validates_associated, in which case exceptions behave like above Besides not being symmetric, the documentation of validates_associated has an example where models associated with has_many are passed to the method, so that makes me wonder whether 1 and 2 above are actually wrong. -- fxn
on 2006-03-18 16:57
on 2006-03-20 01:53
Xavier Noria wrote: > Besides not being symmetric, the documentation of validates_associated > has an example where models associated with has_many are passed to the > method, so that makes me wonder whether 1 and 2 above are actually wrong. Yes, this automatic validation check for new_records in has_many associations surprised me, and seems to be undocumented. It comes via this automatically-added callback: http://dev.rubyonrails.org/browser/trunk/activerec... Is there a good reason for doing this rather than letting the user control it through a validates_associated declaration? By the way, there is a bug in validates_associated for has_many associations whereby the validation will stop when the first nil or invalid object in the collection is encountered. Instead, all objects should be checked for validity so that their errors can be flagged in the view. See: http://dev.rubyonrails.org/ticket/4276 -- We develop, watch us RoR, in numbers too big to ignore.