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?