不要让你的Rails Validate吓着了用户

 

ActiveRecord validations 是Rails很方便的一项特性,由于它如此好用,我们经常使用它,让用户看着了不舒服的信息,比如下面所说的例子:

举个例子,比如现在我要在用户注册的时候验证 Social Security Number (SSN) ,一般代码会是这个样子的:

 

class User < ActiveRecord::Base
  validates_presence_of :ssn
  validates_length_of :ssn, :is => 9
  validates_numericality_of :ssn
  validates_uniqueness_of :ssn
  validates_as_ssn :ssn # Checks if a reserved or special SSN was sent
end


根据以上的配置,如果用户忘记填入SSN,那个页面上会显示4个错误提示信息:

  • SSN can’t be blank
  • SSN is the wrong length (should be 9 characters)
  • SSN is not a number
  • SSN is invalid


问题是,用户只是没有填入SSN,我们应该只显示一条不为空的信息啊,为什么要将其它的不相关的信息也显示出来吓着了用户呢?

 

OMG! What have I done wrong to appear so many errors?

 

解决这个问题的方法很简单,我们可以使用 :allow_blank 选项,因此那其它的验证在SSN号为空的时候是不空触发的:

 

 

class User < ActiveRecord::Base
  validates_presence_of :ssn
  validates_length_of :ssn, :is => 11, :allow_blank => true
  validates_numericality_of :ssn, :allow_blank => true
  validates_uniqueness_of :ssn, :allow_blank => true
  validates_as_cpf :ssn, :allow_blank => true
end

 

 

还可以使用Rails框架给Object添加的Object#with_options 这个方法:

 

class User < ActiveRecord::Base
  validates_presence_of :ssn
 
  with_options :allow_blank => true do |v|
    v.validates_length_of :ssn, :is => 11
    v.validates_numericality_of :ssn
    v.validates_uniqueness_of :ssn
    v.validates_as_cpf :ssn
  end
end

 

 

这以上举的只是一个例子,还有如 validates_confirmation_of :password ,只有在确认密码不为空的时候才验证confirmation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值