ActiveRecord 验证 nil

问题描述 投票:0回答:2

我正在尝试编写一个允许任何字符串但不允许 nil 的活动记录验证。

validates_presences_of 的问题是它对于我想认为有效的“”或“”返回 false。

我也尝试过 validates_length_of :foo, :minimum => 0 ,但没有成功

我也尝试过 validates_length_of :foo, :minimum => 0, :unless => :nil?这也不起作用。这两个都允许设置 nil 值并且验证仍然返回 true。

我在这里错过了什么吗?我觉得简单地验证该元素不为零不应该这么困难。

ruby-on-rails ruby rails-activerecord activesupport
2个回答
5
投票
validate :blank_but_not_nil

def blank_but_not_nil
   if self.foo.nil?
     errors.add :foo, 'cannot be nil'
   end
end

2
投票

你可以尝试吗:

validates_length_of :foo, :minimum => 0, :allow_nil => false

例如:

User < ActiveRecord::Base
  validates_length_of :name, :minimum => 0, :allow_nil => false
end

> u=User.new
> u.valid?  #=> false  #u.name is nil
> u.name=""
> u.valid?  #=> true
© www.soinside.com 2019 - 2024. All rights reserved.