ruby-on-rails - ActiveRecord bool 验证接受非 bool 值

标签 ruby-on-rails validation activerecord rails-activerecord

我正在尝试验证属性是否为 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/

相关文章:

javascript - 帮助在js中制作这个正则表达式

ruby-on-rails - 如何从 ActiveRecord 的序列化数组迁移到 Postgres 数组数据类型

ruby-on-rails - 如何构建像 Rails ActiveRecord 这样的链接接口(interface)?

ruby-on-rails - Mongoid 3.1.0 CounterCache 不起作用

php - 表单字段的自动验证(服务器端)

python - 在 Python 中使用 XML 模式进行验证

javascript - 尝试在我的 Rails 应用程序中截屏页面时 PhantomJS.rb 卡住

ruby-on-rails - Rails 开发模式渲染 View 非常慢

ruby-on-rails - 验证和更新单属性 rails

ruby-on-rails - 使用 DataMapper 而不是 ActiveRecord