我想在验证中检查一个整数值。但我想根据另一个字段的值来做。例如,如果宽度值存在,则如果width_type为"0",则使其至少为300;px";,但是如果width_type是"0"则为30;速率";。我该怎么做呢,谢谢。
如果我理解正确,您正在寻找条件验证
在这种情况下,以下内容应该有效:
validates :width, numericality: { only_integer: true}
validates :width, numericality: { greater_than_or_equal_to: 300}, if: -> {width_type.to_s == 'px'}
validates :width, numericality: { greater_than_or_equal_to: 30}, if: -> {width_type.to_s == 'rate'}
如果你需要处理太多其他场景,我会选择像这样的自定义验证
MIN_WIDTH_PER_TYPE = {px: 300, rate: 30}
validates :width, numericality: { only_integer: true}
validate :_width_with_type
private
def _width_with_type
min_width = MIN_WIDTH_PER_TYPE[width_type.to_sym]
if width < min_width
errors.add(:width, "must be at least #{min_width} when using width type '#{width_type}'")
end
end
你也可以进一步清理,但这应该为你指明正确的方向。