验证Rails中的值

时间:2012-03-13 03:41:42

标签: ruby-on-rails ruby activerecord

我正在尝试验证一个可以在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方法的方法。

2 个答案:

答案 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.decimal1等值,则必须使用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