Проверка связей с MongoMapper - PullRequest
1 голос
/ 01 декабря 2011

Модели:

class User
  include MongoMapper::Document
  many :properties
  validates_associated :properties
  ...
end

class Property
  include MongoMapper::Document
  belongs_to :user
  many :services
  validates_associated :services
  ...
end

class Service
  include MongoMapper::Document
  belongs_to :property
  ...
end

В контроллере:

@property.save #returns false and true as expected
current_user.save #returns always true why?

Кажется, что он не проверяет модель свойств методом current_user.save.Зачем?(

1 Ответ

1 голос
/ 01 декабря 2011

В 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 для обсуждения проблем.

...