自动存在验证,其中sql约束不允许空值

时间:2012-08-03 17:56:04

标签: sql ruby-on-rails-3 postgresql

我不喜欢db

中的空值

我看到多年来出现了太多错误,因为有时会出现令人惊讶的空值。特别是对于我们不希望包含空值的列,我们很容易无法思考它们的含义并得到不好的结果。我坚信字符串字段(如果允许)的空白通常应该在db中表示为空字符串与null。 (最糟糕的是允许混合使用它们两者意味着相同的东西。)

因此,由于我对过去问题的经验,我有条不紊地考虑了每个字段并添加了约束:null =>对db中的任何字段都是false,我没有充分的理由允许空值。对于我想允许空字符串的情况,我将其设置为默认值。

到目前为止一切顺利。

我喜欢红宝石如何处理默认值

正如我所做的那样,我注意到ActiveRecord采用了我在DB中定义的默认值,并使用该值初始化了对象的属性。我很喜欢!

但这让我想要更多。因为现在我发现我正在添加像

这样的代码
validates :name, :presence => true

除了那些我选择提供默认空字符串的情况外,我在db中定义了一个非空约束的每种情况。但为什么我要重复自己?所以我在想 - 如果ActiveRecord为我做这件事会不会很好?

如何从数据库属性添加验证状态

有没有办法可以为数据库中存在非空约束的每种情况自动创建这些验证 - 除非在允许空字符串的特殊情况下通过将其设置为默认值来发出信号?

Bonus:如果有一种方法可以让rails将不同于空字符串的检查添加到db列中,然后只有在字符串字段同时具有not null约束然后不为空时才自动添加presence的验证字符串检查,这将是真的很棒。只是不知道是否可能。

1 个答案:

答案 0 :(得分:1)

我想你可以通过添加observer来实现这样的功能,默认情况下会进行验证。但是,我不确定是否有办法从观察者方法中取消操作,就像你可以用回调一样。