0

我正在使用text_fieldandnumber_field用于一个领域。此字段的更改取决于question_type所选内容。工作number_field正常。chrome它只接受numberinchrome而不是 in mozilaand IE

我如何在模型中创建一个方法,或者我如何判断它:answer_no应该只是numbers(1、0.1 或任何数字而不是整数)。它不应该接受字符串。

<% if question_type == 'C' %>
  <%= f.text_field :answer_no %>
<% elsif (question_type == 'T') and (question_type == 'F') and (question_type != 'C') and (question_type != 'Y') and (question_type != 'Z') %>
  <%= f.number_field :answer_no %>
<% end %>

先感谢您

4

3 回答 3

2

这是一个非常简单的 JavaScript 函数,只接受文本字段中的数字。

在下面添加 JavaScript 函数

<script type="text/javascript">


  function isNumberKey(evt)
  {
     var charCode = (evt.which) ? evt.which : event.keyCode
     if (charCode > 31 && (charCode < 48 || charCode > 57)) {
         alert("Please Enter Only Numeric Value:");
         return false;
     }

     return true;
  }

并添加以下代码以调用 JavaScript 函数以仅接受数字。

<%= f.text_field :zip, :onkeypress=> "return isNumberKey(event)"%>
于 2016-11-23T11:24:50.857 回答
1

您可以对格式进行正则表达式:

validates :answer_no, :format => { :with => /^\d+\.?\d*$/ }

测试rubular

如果要在模型中的方法中定义问题类型,可以编写自定义验证函数:

  class Model < ActiveRecord::Base
  validate :check_question_type

   protected
   def check_question_type
     if question_type == ....
       validates :answer_no, :format => { :with => /^\d+\.?\d*$/ }
     else
       validates :answer_no,
         :presence => true      
     end
   end
  end
于 2013-05-23T09:09:34.633 回答
0

感谢出主意的朋友。但是我根据你的想法让它变得简单了。

validates :answer_no, numericality: true, :if => :answer_cannot_be_string?


def answer_cannot_be_string?
  not (question_type.in? %w{ C Y Z })
end

因此,它接受问题类型的小数和数字。我是根据你的答案的想法做的。所以我给你们俩都加了1。谢谢你。

于 2013-05-23T09:44:02.310 回答