validates不要校验布尔型 presence: true

探讨了在Rails应用中使用boolean类型字段进行presence验证时遇到的问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个小坑

重现

有这么一个对象

class Article
  attr_accessible :can_hidden

  validates :can_hidden, presence: true
end

现在我创建一个不能被隐藏的文章: Article.create!(can_hidden: false)

Boom!!

ActiveRecord::RecordInvalid: 验证失败: can_hidden 不能为空

根源

追踪 PresenceValidator 可以发现问题出在这里:

https://github.com/rails/rails/blob/127411fdf3a3470e8830abf0c7876db67c0c344a/activemodel/lib/active_model/errors.rb#L255

解决办法

不要对 boolean 类型做 presence 校验,设置默认值

其它讨论及解决方案

  1. rails/rails#2521
  2. rails/rails#20343
  3. rails/rails#7508
  4. rails/rails#6953

enjoy!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值