Mongoid:限制嵌入对象的数量

时间:2011-05-04 21:14:49

标签: ruby-on-rails ruby-on-rails-3 mongoid

我正在使用带有Rails的Mongoid 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不支持。

任何建议都非常感谢。

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你也可以使用validates_length_of,它应该可以工作。