Simple example.
class Car < ActiveRecord::Base has_one :engine
validates_presence_of :engine validates_associated :engine end
class Engine < ActiveRecord::Base belongs_to :car
validates_presence_of :car end
@car = Car.new @car.valid? # => false @car.errors # => no engine obviously
@car.build_engine @car.valid? # => false
How come??
@car.errors # => engine has no car! @car.engine.car # => nil
Since we validate_associated :engine, engine runs its own validations and finds that validates_presence_of car is false, since car is nil. Shouldn't engine know the car that built it?
Just for fun I do this:
@car.engine.car = @car @car.valid? # => true
Shouldn't this work by default?