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.
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:
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: