validates_presence_of 不适用于 boolean 字段

Published on 2013-12-04

validates_presence_of 广泛的应用于 Rails model 的验证,但它不能应用于 boolean 字段。因为 false 在 validates_presence_of 眼中,是 invalid,无法通过验证!

范例

  1. 定义 confirmed 字段为 boolean,并添加 validates_presence_of 验证。

    
     Class Evaluation
          ...
          validates :confirmed, presence: {message: "请填写是否通过微信验证?”}
          ...
     end
     
  2. 使用 Rails Console 新建一个 Evaluation 对象,confirmd 字段的值设为 false

    
       [1] pry(main)> a = Evaluation.new(:confirmed => false)
       => Evaluation id: nil, 
                     sex: "female",  
                     confirmed: false
     
  3. 验证

    confirmed 的值为 fasle(不为空),但是依然无法通过 validates_presence_of 验证。

    
     [2] pry(main)> a.valid?
     => false
     [3] pry(main)> a.errors[:confirmed ]
     => [“请填写该用户是否通过了微信验证"]    
     

官方文档

查看 validates_presence_of 的官方文档可以发现这段声明:

If you want to validate the presence of a boolean field (where the real values are true and false), you will want to use validates_inclusion_of :field_name, :in => [true, false].

验证 boolean 字段,我们应该使用 validates_inclusion_of,一定要谨记哦!


Class Evaluation
  ...
  # 正确的写法1
  validates :confirmed, inclusion: {in: [true, false], message: "请填写是否通过微信验证?"}

  # 正确的写法2
  validates_inclusion_of :confirmed, in: [true, false], message: "请填写是否通过微信验证?"
  ...
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值