Rails存在验证在值0上失败

Rails presence validation fails on value 0

我有一个类似于以下的模型,

1
2
3
4
5
6
class Activity < ActiveRecord::Base
    attr_accessible :name, :admin

    validates :name, :presence => true
    validates :admin, :presence => true
end

name属性是一个字符串,admin属性在迁移中定义为boolean。

如果我尝试在控制台中使用创建模型的实例,

1
a = Activity.create(:name => 'Test', :admin => 0)

然后验证失败,说我需要为Admin提供一个值。 为什么? 我提供了一个值。

我能理解,如果我没有提供任何价值,或者我提供了零。 但为什么像0这样的值(或者甚至是假的)会导致验证失败?


validates :presence使用blank?来确定是否存在值。 但是false.blank? => true。 因此验证失败,因为blank?告诉ActiveRecord没有值存在。

您可以将其重写为:

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

按照Rails指南中的建议:ActiveRecord验证

另请参阅Ruby on Rails中nil v.vull v.blank的简明解释


Rails 4/5

1
validates :name, absence: true