Ruby on rails 如果发现更重要的验证错误,如何禁用其他验证
我希望将数值模型属性foo验证为 1人出席,以及 2必须大于或等于0。 由于1是2的先决条件,如果没有为参数foo提供值,我希望验证只报告与1相关的错误,而不是与2相关的错误 我试着这样做: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
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语法优雅但不起作用。看起来没用。