Mongoid: ограничение количества встроенных объектов

Я использую Mongoid с Rails 3. Как лучше всего ограничить количество встроенных объектов (фотографий), которые можно хранить в каждом родительском объекте (альбоме)?

class Album
  include Mongoid::Document
  embeds_many :photos
end

class Photo
  include Mongoid::Document
  embedded_in :album, :inverse_of => :photos
end

С ActiveRecord я бы сделал что-то вроде:

has_many :photos, :before_add => :enforce_photo_limit

private

def enforce_photo_limit
  raise "Too many photos" if self.photos.count >= 50
end

... но это не поддерживается Mongoid.

Любые предложения высоко ценятся.

Спасибо.


person gjb    schedule 04.05.2011    source источник


Ответы (2)


Mongoid включает в себя ActiveModel::Validations, так что вы должен иметь возможность использовать методы, содержащиеся в этом модуле:

class Album
  include Mongoid::Document
  embeds_many :photos

  validate :less_than_fifty_photos

  def less_than_fifty_photos
    errors.add(:base, "Too many photos") if self.photos.count >= 50
  end
end

Дополнительная информация: http://mongoid.org/docs/validation.html

person McStretch    schedule 05.05.2011

Вы также можете использовать validates_length_of, и это должно сработать.

person Jared Fine    schedule 12.07.2013