Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 On Rails_Ruby_Activerecord_Activeadmin_Simple Form - Fatal编程技术网

Ruby on rails 十进制值的验证不会阻止输入任意字符串

Ruby on rails 十进制值的验证不会阻止输入任意字符串,ruby-on-rails,ruby,activerecord,activeadmin,simple-form,Ruby On Rails,Ruby,Activerecord,Activeadmin,Simple Form,我对我的类产品的价格属性进行了验证: validates_numericality_of :price, greater_than_or_equal_to: 0.5, allow_blank: true 因此,当我输入一个太小的值时,我会收到一条验证消息: 但是,当我输入一个垃圾值,如字符串abcdefg时,模型会保存,但会将价格设置回nil 这是一个严重的错误,因为用户可能会输入100$,数据将丢失,而用户不会注意到 从myschema.rbs t.decimal "price", pr

我对我的类
产品
价格
属性进行了验证:

validates_numericality_of :price, greater_than_or_equal_to: 0.5, allow_blank: true
因此,当我输入一个太小的值时,我会收到一条验证消息:

但是,当我输入一个垃圾值,如字符串
abcdefg
时,模型会保存,但会将价格设置回
nil

这是一个严重的错误,因为用户可能会输入
100$
,数据将丢失,而用户不会注意到

从my
schema.rb
s

t.decimal  "price", precision: 10, scale: 2

我如何确保用户不能添加这样一个无效值?

模型正在保存,因为您有
allow\u blank:true
@max:这听起来似乎有道理,但
abcdefg
不是有效值,因此不应保存IMHO,此外,0.01是另一个无效值,因此验证有效。其工作方式是将其转换为数字,例如使用to_f<代码>“abcdef”。to_f
返回
nil
。问题:您是否尝试输入
100$
以查看实际发生的情况?是的,但验证器的工作方式是使用
Kernel.Float
转换原始值。如果不返回浮点值,则将该值设置为nil。如果你有
allow_blank:true
它会短路,所以这是有效的。如果设置了值,但根本不是十进制/数字,则它不会向错误哈希中添加单独的错误。如果您需要这种确切的行为,您可能需要创建自己的验证器。