验证inclusions_of接受字符串作为错误值

时间:2012-07-17 10:08:27

标签: ruby-on-rails-3 mongoid

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

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

如您所见,我将接受的值设置为布尔值和零。问题是当我分配一个字符串时,它被转换为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,但似乎我失去了一个更简单的解决方案。我已经在网上查了一下,但我找不到解决方案。

感谢。

1 个答案:

答案 0 :(得分:0)

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