在ActiveRecord中,验证属性是否存在但可能为空

时间:2012-10-23 23:01:10

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在尝试在Rails 3.2.8中设置我的模型,以便必须存在特定值,但允许为空字符串。有谁知道怎么做?

我正在寻找的行为如下:

@foo.value = "this is a real value"
@foo.valid? # => true

@foo.value = nil
@foo.valid? # => false

@foo.value = ""
@foo.valid? # => true

如果我使用

validates :foo, :presence => true

然后我得到了我想要的1和2,但不是3.而且,在验证状态时,:allow_blank => truevalidates :foo, :length => { :minimum => 0 }, :allow_nil => false 是有帮助的。

我也试过

NOT NULL

相同的行为:得到我想要的1和2,但不是3。

我想我可以在数据库中将列标记为{{1}},但是我必须处理捕获异常;我真的很想在验证阶段抓住它。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我会尝试这样的事情:

validates :foo, presence: true, unless: lambda { |f| f.foo === "" }