Ruby on rails 如果发现更重要的验证错误,如何禁用其他验证

Ruby on rails 如果发现更重要的验证错误,如何禁用其他验证,ruby-on-rails,validation,error-handling,Ruby On Rails,Validation,Error Handling,我希望将数值模型属性foo验证为 1人出席,以及 2必须大于或等于0。 由于1是2的先决条件,如果没有为参数foo提供值,我希望验证只报告与1相关的错误,而不是与2相关的错误 我试着这样做: validates :foo_attribute, numericality: {greater_than_or_equal_to: 0}, presence: true 但是,当parameter:foo的给定值不存在时,我会收到来自验证1和验证2的错误消息 在这种情况下,如何仅获取与1而不是2

我希望将数值模型属性foo验证为

1人出席,以及 2必须大于或等于0。 由于1是2的先决条件,如果没有为参数foo提供值,我希望验证只报告与1相关的错误,而不是与2相关的错误

我试着这样做:

validates :foo_attribute,
  numericality: {greater_than_or_equal_to: 0},
  presence: true
但是,当parameter:foo的给定值不存在时,我会收到来自验证1和验证2的错误消息


在这种情况下,如何仅获取与1而不是2相关的验证错误?

看起来内部验证只是将其拆分为多个验证:

def validates(*attributes)
  defaults = attributes.extract_options!.dup
  validations = defaults.slice!(*_validates_default_keys)

  raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
  raise ArgumentError, "You need to supply at least one validation" if validations.empty?

  defaults[:attributes] = attributes

  validations.each do |key, options|
    next unless options
    key = "#{key.to_s.camelize}Validator"

    begin
      validator = key.include?('::') ? key.constantize : const_get(key)
    rescue NameError
      raise ArgumentError, "Unknown validator: '#{key}'"
    end

    validates_with(validator, defaults.merge(_parse_validates_options(options)))
  end
end
在这种情况下,您必须编写自己的方法或执行以下操作:

validates_presence_of :foo_attribute
validates_numericality_of :foo_attribute, greater_than: 0, unless: Proc.new { |foo_instance| foo_instance.foo_attribute.nil? }

使用两条单独的验证行来表示存在性和数字性不是一个选项吗?@sajan这会让情况变得更糟。我认为你需要编写自己的验证行method@sawa我的意思是这样的验证:foo_属性,数值性:{大于或等于:0},如果:'foo_属性。当前?'@sajan我明白了。那就行了。但是如果这是我应该走的路,那么我想知道validates:foo_属性的目的是什么,数值性:{bether_than_或_qaeusl_to:0},presence:true语法优雅但不起作用。看起来没用。