我正在尝试验证一个可以在1到6.5之间但只增加.5的浮点数,因此{1,1.5,2.0,2.5,3,3.5,4,4.5,5,5.5,6,6.5}。有没有办法在rails中验证这一点。到目前为止,我有:
validates :value, :inclusion => 1..6.5, is_value_valid => true
def is_value_valid
if self.value % 0.5 == 0
true
else
false
end
end
我在测试时遇到错误,我认为这不是你调用is_value_valid
方法的方法。
答案 0 :(得分:5)
您可以使用自定义方法对其进行验证,因此完整验证应如下所示:
validates :value, :inclusion => {:in => 1..6.5}
validate :value_is_multiple_of_point_five
def value_is_multiple_of_point_five
unless value % 0.5 == 0
errors.add(:value, "must be multiple of 0.5")
end
end
答案 1 :(得分:0)
首先,如果您确实需要t.decimal
和1
等值,则必须使用5.5
列,并使用浮点值打开门解决所有常见的浮点问题。如果您使用十进制列,Rails将使用您的value
的BigDecimal值,只要您将所有内容保存在BigDecimal的土地上,您就可以了:
validate :valid_value_very_vigorously
HALF = BigDecimal('0.5')
UPPER = BigDecimal('6.5')
LOWER = BigDecimal('1.0')
def valid_value_very_vigorously
errors.add(:value, "Value must be at least #{LOWER}") if(value < LOWER)
errors.add(:value, "Value must be at most #{UPPER}") if(value > UPPER)
errors.add(:value, "Value must be a multiple of 0.5") if(value % HALF != 0)
end