Ruby on rails 使用Ruby ActiveRecord验证接受20.00为整数的数值性
我们正在和一家网站开发公司合作建立一个网站。我们有一个字段,要求用户输入他们想要投资的金额。我们要求将此字段限制为整数。例如,用户应该能够投资“20”或“20.00”,但不能投资“20.50” 开发人员正在使用Ruby ActiveRecord Validate_numericality:only_integer,它将输入限制为“20”。如果用户输入并提交值“20.00”,他们会收到一个错误,告诉他们需要输入一个整数 有没有一种方法可以使用ActiveRecrod validate_numericality只接受整数,而不一定只接受整数?代码当前为:Ruby on rails 使用Ruby ActiveRecord验证接受20.00为整数的数值性,ruby-on-rails,ruby,validation,activerecord,Ruby On Rails,Ruby,Validation,Activerecord,我们正在和一家网站开发公司合作建立一个网站。我们有一个字段,要求用户输入他们想要投资的金额。我们要求将此字段限制为整数。例如,用户应该能够投资“20”或“20.00”,但不能投资“20.50” 开发人员正在使用Ruby ActiveRecord Validate_numericality:only_integer,它将输入限制为“20”。如果用户输入并提交值“20.00”,他们会收到一个错误,告诉他们需要输入一个整数 有没有一种方法可以使用ActiveRecrod validate_numeri
验证:本金,数字:{大于或等于:最小投资金额,
小于或等于:最大投资额,
:仅_整数=>true}
我希望有一个数字限制,允许20.00作为一个整数。你可以这样做
before_validation {|a| a.principal = principal.to_i}
这将在不修改验证的情况下将其转换为整数,但如果您希望通知用户他们输入的不是整数,则我将删除:only_integer
,并创建更灵活的验证,如
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
是否允许用户在验证之前输入浮点数并将其转换为整数,或者如果他们试图提交带有小数的表单,是否希望引发验证错误?我希望允许用户输入浮点数(即20.00),但仅当浮点数为一个整数(即20.50)。我不确定这是否回答了你的问题,是的@engineersmnky的答案应该可以。谢谢你的输入!谢谢你的帮助!为了确保我理解,“.to_I”函数将接受20.00并返回20,因此检查以确保principal.to_I==principal将确保20==20.00。这意味着值为20.50将使20!=20.50并返回错误。这是否正确?@krewlobster correct
20==20.00#=>true
但20==20.5#=>false
。此外,仅注释浮点数的尾随零不超过第十位(因为这表明它们是浮点数
)20.00000
将返回为20.0
,但20.0001
仍将返回20.0001
非常感谢!我会把这个传给我们的开发者。