ruby-on-rails - 验证 Rails ActiveRecord 中的 bool 字段

标签 ruby-on-rails rails-activerecord

<分区>

我需要验证 Rails ActiveRecord 对象的 bool 字段。我使用了这个问题的通用解决方案:

validates :boolean_field, :inclusion => { :in => [true, false] }

但是,虽然这个解决方案解决了验证 false 值的问题,它仍然允许将字符串保存到 boolean_field:

my_object.boolean_field = "string"
my_object.save # => true
my_object.boolean_field # => false

如果我将包含指定为 [true, false],为什么会发生这种情况?更重要的是,如何验证真值和假值?

附言如果这个问题很重要,我正在使用 PostgreSQL。

最佳答案

你可以通过检查数据类型来验证,你可以使用is_a?并将数据类型的类名作为参数传递

pry(main)> a = "aaaaa"
=> "aaaaa"
pry(main)> a.is_a?(Boolean)
=> false

因为它是一个字符串,它返回了 false,现在尝试 bool 值

pry(main)> b = true
=> true
pry(main)> b.is_a?(Boolean)
=> true

使用此逻辑添加自定义验证

validate :check_boolean_field

def check_boolean_field
  errors.add(...) unless boolean_field.is_a?(Boolean)
end

关于ruby-on-rails - 验证 Rails ActiveRecord 中的 bool 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26363147/

相关文章:

ruby-on-rails - Rails 4 关系#全部弃用

ruby-on-rails - Rails 中 session 变量的可见性

ruby-on-rails - Rails - 回形针 - 多张照片上传不保存

ruby - 根据翻译名称选择记录

ruby-on-rails - 学习 Rails -> 设置食谱应用程序

ruby-on-rails - ActiveRecord:清理 `select` 或 `order` 调用中的动态值

ruby-on-rails - SQLite3::ConstraintException:约束失败:

ruby-on-rails - 如何在 Rails 中使用 PostGIS 函数?

ruby-on-rails - Ruby:将按钮文本更改为图标

ruby-on-rails - Rails 相关模型以 "NameError uninitialized constant"退出