我有一个类似于以下的模型,
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)
然后验证失败,说我需要为Admin提供一个值。为什么?我提供了一个值。
我能理解,如果我没有提供任何价值或者我提供的是否为零。但为什么像0这样的值(或者甚至是假的)会导致验证失败?
答案 0 :(得分:18)
validates :presence
使用blank?
来确定是否存在值。但是false.blank?
=&gt;真正。因此验证失败,因为blank?
告诉ActiveRecord没有值存在。
您可以将其重写为:
validates :field_name, :inclusion => { :in => [true, false] }
根据Rails Guides: ActiveRecord Validations
的建议另见A concise explanation of nil v. empty v. blank in Ruby on Rails
答案 1 :(得分:1)
Rails 4/5
validates :name, absence: true