10

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

class Activity < ActiveRecord::Base
    attr_accessible :name, :admin

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

name 属性是一个字符串,而 admin 属性在迁移中定义为布尔值。

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

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

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

如果我根本没有提供值,或者我提供了 nil,我可以理解。但是为什么像 0 (或者甚至是 false )这样的值会导致验证失败?

4

2 回答 2

20

validates :presence用于blank?确定值是否存在。但是false.blank?=> 是的。所以验证失败,因为blank?告诉 ActiveRecord 没有值存在。

您可以将其重写为:

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

正如Rails 指南中所推荐的:ActiveRecord Validations

另见Ruby on Rails 中 nil v.empty v.blank 的简明解释

于 2012-11-05T05:23:27.607 回答
1

导轨 4/5

validates :name, absence: true
于 2017-01-27T17:09:19.803 回答