我有一张有很多照片的专辑。 counter_cache设置会更新相册表中的photos_count列。如何限制相册的照片数量?
答案 0 :(得分:29)
使用验证钩子:
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
答案 1 :(得分:28)
就我而言,只需使用validates_length_of
:
class Album
has_many :photos
validates_length_of :photos, maximum: 10
end
class Photo
belongs_to :album
validates_associated :album
end
答案 2 :(得分:6)
如何向Photo模型添加自定义验证方法?
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
答案 3 :(得分:0)
ActiveRecord::Base.transaction do
ActiveRecord::Base.connection.execute('LOCK TABLE pictures IN EXCLUSIVE MODE')
if (@album.pictures.count < 10)
@album.pictures.create()
end
end
我相信这是最正确的解决方案。它可以防止并发问题/竞争条件。