在Ruby on Rails中添加自定义验证方法

时间:2014-11-19 05:09:17

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

我需要创建一个名为findUpperCaseLetter或类似

的自定义验证方法

我有一个名为password的属性,属于名为User

的模型

我的方法有点类似于以下内容。 password属性必须至少包含大写字母

  def findUpperCaseLetter(username)
     username.each_char do |character| 
          return true if  character=~/[[:upper:]]/  
     end

   return false

  end

我想将此验证添加到用户模型

class User < ActiveRecord::Base
  attr_accessible :user_name,:email, :password
  validates_presence_of :user_name,:email, :password
  validates_uniqueness_of :user_name,:email
  ????
end  

我已经有以下常规赎罪

 validates_format_of :password, :with => /^[a-z0-9_-]{6,30}$/i, 
   message: "The password format is invalid"

如何修改它以添加以下内容

密码必须至少包含一个大写字母

1 个答案:

答案 0 :(得分:1)

您不需要自定义验证来执行此操作,您可以使用正则表达式来验证密码的格式。将其添加到您的模型

validates :password, format: { with: /^(?=.*[A-Z]).+$/, allow_blank: true }

在Rails中,您可以使用format验证程序执行此操作,我添加了allow_blank: true以确保字段为空时它只会抛出Can't be blank错误消息而不是格式验证程序错误信息。

此正则表达式的工作是仅在密码包含至少一个大写字母时才允许将密码保存在数据库中。我已经在rubular上创建了一个固定链接,请点击此处http://rubular.com/r/mOpUwmELjD

希望这有帮助!