限制has_many关联中的对象数

我有一张有很多照片的专辑。 counter_cache设置会更新相册表中的photos_count列。 如何限制相册的照片数量?

使用validation钩子:

 class Album has_many :photos validate_on_create :photos_count_within_bounds private def photos_count_within_bounds return if photos.blank? errors.add("Too many photos") if photos.size > 10 end end class Photo belongs_to :album validates_associated :album end 

就我而言,使用validates_length_of就足够了:

 class Album has_many :photos validates_length_of :photos, maximum: 10 end class Photo belongs_to :album validates_associated :album end 

如何为Photo模型添加自定义validation方法?

  LIMIT = 50 validate_on_create do |record| record.validate_quota end def validate_quota return unless self.album if self.album.photos(:reload).count >= LIMIT errors.add(:base, :exceeded_quota) end end 
 ActiveRecord::Base.transaction do ActiveRecord::Base.connection.execute('LOCK TABLE pictures IN EXCLUSIVE MODE') if (@album.pictures.count < 10) @album.pictures.create() end end 

我相信这是最正确的解决方案。 它可以防止并发问题/竞争条件。