Rails验证整数值grater然后如果其他字段值



我想在验证中检查一个整数值。但我想根据另一个字段的值来做。例如,如果宽度值存在,则如果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 

你也可以进一步清理,但这应该为你指明正确的方向。

最新更新