限制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
我相信这是最正确的解决方案。 它可以防止并发问题/竞争条件。
- 如何设置轮胎弹性搜索的默认分析器?
- 使用Google-Maps-for-Rails Gem如何找到指定距离内指定距离的点?
- 没有路由匹配{:action =>“show”,:controller =>“schools”}缺少必需的键:
- 迁移中没有自动增量选项的id字段
- 两个表具有相同数据的Rails?
- 什么是此路由错误和rake路由错误?
- 从Ruby on Rails中的链接下载video
- 如何validationhas_many的唯一性:通过连接模型?
- ActionController :: RoutingError(没有路由匹配“/assets/images/control_top.png”):在rails 3.2.8中