Подтвердить что ты не робот

Ограничить количество объектов в ассоциации has_many

У меня есть альбом, у которого есть несколько фотографий. Настройка counter_cache обновляет столбец photos_count в таблице альбомов. Как ограничить количество фотографий для альбома?

4b9b3361

Ответ 1

Используйте крючок проверки:

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

Ответ 2

В моем случае было достаточно использовать validates_length_of:

class Album
  has_many :photos
  validates_length_of :photos, maximum: 10
end

class Photo
  belongs_to :album
  validates_associated :album
end

Ответ 3

Как добавить пользовательский метод проверки на модель фото?

  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