Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Ruby ActiveRecord验证接受20.00为整数的数值性_Ruby On Rails_Ruby_Validation_Activerecord - Fatal编程技术网

Ruby on rails 使用Ruby ActiveRecord验证接受20.00为整数的数值性

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

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

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

有没有一种方法可以使用ActiveRecrod validate_numericality只接受整数,而不一定只接受整数?代码当前为:


验证:本金,数字:{大于或等于:最小投资金额,
小于或等于:最大投资额,
:仅_整数=>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
非常感谢!我会把这个传给我们的开发者。