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

时间:2014-06-16 00:25:38

标签: ruby-on-rails ruby ruby-on-rails-3 validation

我有一个自定义验证,确保我在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

1 个答案:

答案 0 :(得分:1)

您可以使用 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