如何限制我的字段应该只接受rails中的数字?

时间:2013-05-23 08:40:26

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用text_fieldnumber_field作为一个字段。此字段更改取决于所选的question_typenumber_fieldchrome中正常运行。它仅接受number中的chrome,而不接受mozilaIE中的:answer_no

如何在模型中创建方法或如何判断numbers应该只是<% 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 %> (1,0.1,或任何不是整数的数字)。它不应该接受字符串。

{{1}}

提前谢谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是一个非常简单的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)"%>

答案 2 :(得分:0)

感谢Ideas的朋友们。但是我的想法很简单。

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。谢谢。