【问题标题】:Rails validation not running when creating new associations创建新关联时,Rails 验证未运行
【发布时间】:2014-06-16 00:25:37
【问题描述】:

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

【问题讨论】:

  • 您说您正在使用 habtm。在这种情况下,根据文档,&lt;&lt; 会立即触发 sql 更新,因此不会在父对象中运行验证。

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


【解决方案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

【讨论】:

  • 我和一个伙伴花了两天时间试图做到这一点。非常感谢。
猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多