У меня есть альбом, у которого есть несколько фотографий. Настройка counter_cache обновляет столбец photos_count в таблице альбомов. Как ограничить количество фотографий для альбома?
Ограничить количество объектов в ассоциации has_many
Ответ 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