В MongoMapper назначение невстраиваемых ассоциаций многих автоматически сохраняет записи, которые вы ассоциируете. Но если какая-либо из этих записей недействительна, они молча не сохраняются в базе данных. В следующий раз, когда вы запросите ассоциацию, MongoMapper перейдет в базу данных и ничего не найдет. Заданные вами недействительные записи исчезают.
user = User.new(:properties => [Property.new])
user.properties # => []
user.valid? # => true
Вы можете использовать метод build
для добавления объектов в ассоциацию без сохранения.
user = User.new
user.properties.build
user.properties # => [#<Property _id: BSON::ObjectId('...0e'), user_id: BSON::ObjectId('...0c')>]
user.valid? # => false
Я считаю сохранение ассоциации одним из слабых мест MongoMapper. Однако это не простая проблема. См. выпуск № 233 на github для обсуждения проблем.