使用Ruby ActiveRecord Validates_Numericality接受20.00作为整数

时间:2014-07-30 18:49:16

标签: ruby-on-rails ruby validation activerecord

我们正在与网络开发公司合作建立一个网站。我们有一个字段,我们要求用户输入他们想要投资的金额。我们要求此字段仅限于整数。例如,用户应该能够投资“20”或“20.00”而不是“20.50”。

开发人员使用Ruby ActiveRecord Validate_numericality:only_integer将输入限制为“20”。如果用户输入并提交值“20.00”,则会收到错误,告知他们需要输入整数。

有没有办法使用ActiveRecrod validate_numericality只接受整数的数字,而不仅仅是整数?该代码目前是:

validates :principal, numericality: {greater_than_or_equal_to:MINIMUM_INVESTMENT_AMOUNT, less_than_or_equal_to:MAXIMUM_INVESTMENT_AMOUNT, :only_integer => true}

我希望有一个数字约束,允许20.00作为一个整数。

1 个答案:

答案 0 :(得分:2)

你可以这样做

before_validation {|a| a.principal = principal.to_i}

这会将其转换为整数而不修改验证但如果您想通知用户他们输入的内容不是整数,那么我会删除:only_integer并创建一个更灵活的验证,如< / p>

validates :principal, numericality:{greater_than_or_equal_to:MINIMUM_INVESTMENT_AMOUNT, less_than_or_equal_to:MAXIMUM_INVESTMENT_AMOUNT}
validate :principal_is_whole_number

def principal_is_whole_number
  errors.add(:principal, "must be a whole number.") unless principal.to_i == principal
end