Ser*_*gey 3 ruby-on-rails rails-activerecord
我需要验证Rails ActiveRecord对象的布尔字段.我用这个问题的常见解决方案:
validates :boolean_field, :inclusion => { :in => [true, false] }
Run Code Online (Sandbox Code Playgroud)
但是虽然这个解决方案解决了验证false值的问题,但它仍然允许将字符串保存到boolean_field:
my_object.boolean_field = "string"
my_object.save # => true
my_object.boolean_field # => false
Run Code Online (Sandbox Code Playgroud)
如果我将包含指定为[true, false]?为什么会发生这种情况?更重要的是,我如何仅验证真值和假值?
PS如果这个问题很重要,我正在使用PostgreSQL.
您可以通过检查数据类型进行验证,您可以使用is_a?并传递数据类型的类名作为参数
pry(main)> a = "aaaaa"
=> "aaaaa"
pry(main)> a.is_a?(Boolean)
=> false
Run Code Online (Sandbox Code Playgroud)
由于它是一个返回的字符串false,现在尝试使用boolean
pry(main)> b = true
=> true
pry(main)> b.is_a?(Boolean)
=> true
Run Code Online (Sandbox Code Playgroud)
使用此逻辑添加自定义验证
validate :check_boolean_field
def check_boolean_field
errors.add(...) unless boolean_field.is_a?(Boolean)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3933 次 |
| 最近记录: |