ruby中布尔类型字段的非空校验

在Ruby中,使用validate_presence_of无法对boolean类型的is_audit字段进行有效非空校验,因为Rails将false视为空值。为解决此问题,可以采用validates_inclusion_of方法,设定is_audit字段必须包含在[true, false]范围内。" 103939503,8818996,Stack Overflow 推荐的11本程序员必读书籍,"['编程', '学习资源', '书籍推荐', '软件开发', '算法']

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

无法用validate_presence_of来对boolean类型字段进行非空校验

migration代码

class CreateCorporateFinancials < ActiveRecord::Migration
  def self.up
    create_table :corporate_financials do |t|
      t.integer :corporate_id
      t.boolean :is_audit, :null => false, :default => false
      t.text :balance_sheet
      t.timestamps
    end
  end

  def self.down
    drop_table :corporate_financials
  end
end

model:

class CorporateFinancial < ActiveRecord::Base
  serialize :balance_sheet, Hash
  belongs_to :corporate
  validates_presence_of :is_audit
end
  corporate_financial = CorporateFinanical.new(params)
  cor_fina = CorporateFinancial.new(params)
  corporate_financial.is_aduit  
  => false
  cor_fina.is_audit
  => true
  corporate_financial.valid?
  => false
  corporate_financial.errors
  => {:is_audit => "不能为空"}

  cor_fina.valid?
  => true

当is_audit的值为false的时候,rails认为其值为空,意味着在对布尔类型的字段进行非空校验时不能用validates_presence_of,我的解决方法是: validates_inclusion_of :is_audit, :in => [true, false]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值