繁体   English   中英

创建新关联时,Rails验证未运行

[英]Rails validation not running when creating new associations

我有一个自定义验证,可确保我在HABTM关联中没有太多关联。 这是Request模型中的验证

  validate :max_tags

  MAXIMUM_AMOUNT_OF_TAGS = 5

  def max_tags
    debugger
    unless tags.count < MAXIMUM_AMOUNT_OF_TAGS
       errors[:base ] << "You cannot have more than #{MAXIMUM_AMOUNT_OF_TAGS} tags on this gift request." 
    end
  end

每当我创建一个新的Request时,此验证就会运行; 但是,每当我创建tags并将其关联到Request时,它都不会执行。 这是一段代码,在创建新关联时不执行验证

if @request.save
  if tags
    tags.each do |tag|
      tag = Tag.find_by_name(tag)
      if tag
        self.tags << tag
        tag.increment_gift_request_count
      end
    end
  end
end

您可以使用before_add回调验证数字标签,如下所示:

MAXIMUM_AMOUNT_OF_TAGS = 5
has_and_belongs_to_many :tags, before_add: :validate_max_tags

private

def validate_max_tags(tag)
  if (tags.count > MAXIMUM_AMOUNT_OF_TAGS) 
    errors.add(:base, :max_tag_error)
    raise ActiveRecord::Rollback
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM