【问题标题】:Validate boolean fields in Rails ActiveRecord [duplicate]验证 Rails ActiveRecord 中的布尔字段
【发布时间】:2014-10-14 14:19:21
【问题描述】:

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

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。

【问题讨论】:

标签: ruby-on-rails rails-activerecord


【解决方案1】:

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

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

因为它是一个字符串,它返回false,现在试试布尔值

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多