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