Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Validation Rails使用allow_blank验证键入错误的数字_Validation_Ruby On Rails 4 - Fatal编程技术网

Validation Rails使用allow_blank验证键入错误的数字

Validation Rails使用allow_blank验证键入错误的数字,validation,ruby-on-rails-4,Validation,Ruby On Rails 4,例如,当我输入11q而不是11时,我没有收到任何错误,并且表单将被保存,就好像什么都没有发生一样。不幸的是,Rails认为11q实际上是零 这是我当前的验证行: validates :order_retain_days, numericality: {in: 1..999, only_integer: true, message: 'retain value must be an integer between 1 and 999'}, allow_blank: true db/schem

例如,当我输入11q而不是11时,我没有收到任何错误,并且表单将被保存,就好像什么都没有发生一样。不幸的是,Rails认为11q实际上是零

这是我当前的验证行:

validates :order_retain_days, numericality: {in: 1..999, only_integer: true,  message: 'retain value must be an integer  between 1 and 999'}, allow_blank: true
db/schema.rb的片段

create_table "order_details", force: true do |t|
    t.integer  "order_retain_days"
end

如果Javascript关闭,我如何验证它?我需要允许空白字段或数值在数字范围内。

您可以创建自己的自定义验证:

validate :presence_and_numericality_of_order_retain_days
def presence_and_numericality_of_order_retain_day
  if self.order_retain_days && !self.order_retain_days=~ /insert your regex here/
    errors.add(order_retain_dats, 'retain value must be an integer  between 1 and 999')
  end
end

更改视图,使文本字段而不是数字字段可以解决此问题。浏览器(至少是Safari)会将键入错误的数字更改为空字符串。如果要允许_为空,自定义验证将不起作用。在我的视图中去掉数值_字段是解决方案。它做自定义验证是检查对象是否存在并且不符合条件,然后它将添加到错误对象,如果不存在它将通过。请检查上面写的方法。你不明白这一点。如果你没有什么可检查的,正则表达式就没有意义了。例如,当您错误地键入一个数字,而不是在参数中键入11时,您将看到空字符串。无法区分params中的空字符串是将字段留空的结果还是键入错误的数字的结果。