我正在尝试验证属性是否为 bool 值,即 true 或 false。
从我期望的 Rails 指南
validates :new_out_of_stock, inclusion: { in: [true, false] }
工作,但它接受非 bool 值(例如“Hi”)作为有效:
irb> ip = ItemPrice.new
irb> ip.new_out_of_stock = "Hi"
=> "Hi"
irb> ip.valid?
=> true
irb> ip.errors.messages
=> {}
它正确地拒绝了
nil
并接受真假。我读过的 Internet 上的所有文档都说这是验证 bool 属性的正确方法。为什么不起作用?
编辑:这是类定义:
class ItemPrice < ActiveRecord::Base
belongs_to :item, counter_cache: true
validates :new_out_of_stock, inclusion: { in: [true, false] }
end
最佳答案
我认为非 bool 值在分配给属性时会被强制为 bool 值,从而导致它们通过验证。
看:
irb> ip.new_out_of_stock
=> nil
irb> ip.new_out_of_stock = "hi"
=> "hi"
irb> ip.new_out_of_stock
=> false
并且清楚
false
是一个有效的 bool 值,因此该字段通过。
关于ruby-on-rails - ActiveRecord bool 验证接受非 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20657344/