【问题标题】:Why Rails number_field form Builder accepts a floating value?为什么 Rails number_field form Builder 接受浮点值?
【发布时间】:2015-05-22 12:53:31
【问题描述】:

我有一个带有number_field 的rails 表单构建器,如下所示:

= f.number_field :integer_value, :step => 1, :class => 'form', :value => obj.value

它将html生成为:

<input class="form" id="people_attributes_232322900500_integer_value" name="people[people_attributes][232322900500][integer_value]" placeholder="" step="1" type="number">

但它仍然接受浮点值。

我在服务器端得到的参数是

{........, "integer_value"=>"12123.323"}

【问题讨论】:

  • 你在哪个浏览器中测试这个?
  • 取决于浏览器
  • 我在 Safari 中测试这个
  • 如果您知道约束范围,您可以将其设为选择框并传入一个范围,例如f.select :integer_value,(1..500).to_a
  • @apneadiving thx,你是对的..我在 chrome 中测试过,它可以工作..但是当我输入:'2323'时它失败了。 , 一个点后面的数字!

标签: ruby-on-rails ruby forms ruby-on-rails-4


【解决方案1】:

你还是要在后端验证号码,例如:

validates :integer_value,
  :presence => true,
  :numericality => { :only_integer => true, :greater_than => 0, :less_than_or_equal_to  => 100 }

对于输入元素,添加min="0" 以将值限制为整数。尽管如此,用户还是可以在所有/大多数浏览器中输入浮点数。

【讨论】:

  • 好答案。我想补充一点: Step 仅指定用户单击 +/- 按钮时增加/减少值的程度。它不会将值强制转换为整数。
【解决方案2】:

这不是由于导轨。 input type='number' 是一个 HTML5 结构,它只提供要在此字段中提供的数字。它不限制用户输入非数字字符。

虽然大多数浏览器会在此字段上应用客户端验证,但当您尝试提交表单时会显示验证错误。 注意:验证错误完全取决于浏览器和浏览器版本

您应该对字段应用服务器端验证,以确保不接受非数字字段 检查zwippie提供的服务器端验证答案

参考链接:http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2020-09-18
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多