1

我正在使用 MonogID 创建一些模型,其中一个是可以接受 nil 值的布尔值。这是我定义模型的方式。

class Status
  include Mongoid::Document
  field :pending, type: Boolean
  validates :pending, inclusion: { in: [true, false], allow_nil: true }
  #...
end

如您所见,我将接受的值设置为布尔值和 nil。问题是当我分配一个字符串时,它被转换为 false 并被接受。这样,验证不起作用。在这种情况下,第二个测试失败了。

it { [true, false, nil].each { |value| should allow_value(value).for(:pending) } }
it { ['not_valid', ''].each { |value| should_not allow_value(value).for(:pending) } }

现在,我提出的唯一解决方案是制作一个自定义验证器来检查 TrueClass、FalseClass 或 NilClass 的值,但似乎我失去了一个更简单的解决方案。我在网上查了一下,但没有找到解决办法。

谢谢。

4

1 回答 1

0

您无法找到解决方案,因为当您将值分配给布尔字段时,它会将该值解释为 true、false 或 nil,并且当您尝试保存它时,它将具有其中一个值(true、false、nil)将通过验证。

于 2012-07-17T14:29:20.273 回答