2012-08-03 41 views
0

我不喜欢在空分贝自动验证存在SQL哪里约束不允许为空

我看到了太多的错误出现在从空的,有时令人惊讶的性质多年。特别是对于我们不期望包含空值的列,我们很容易无法考虑其含义并得到不好的结果。我坚信空字符串字段(如果允许)通常应该在数据库中表示为空字符串vs null。 (尽管最糟糕的是允许两者混合使用,但它们两者意味着相同的东西)

因此,由于我对过去问题的经验,我已经有条不紊地考虑每个字段并将约束条件添加到:null => false在数据库领域,我没有一个很好的理由,允许空值。对于我想允许空字符串的情况,我将其设置为默认值。

到目前为止这么好。

我喜欢对待默认如何红宝石值

正如我已经做到了这一点我已经注意到,ActiveRecord的需要在数据库中定义我的默认,并用该值对象的初始化属性。我喜欢那个!

但是这让我想要更多。因为现在我发现我加入如下代码

validates :name, :presence => true 

在那里我已经在除非我选择提供一个默认的空字符串的情况下该数据库定义的非空约束每一个案件。但是,我为什么重复自己?所以我在想 - 如果ActiveRecord为我做了这件事,会不会很好?

如何添加验证从数据库性能

存在是有办法,我可以自动创建这些验证了那里是一个数据库中的NOT NULL约束每一个案件 - 除了在特殊情况下我允许空字符串并通过将其设置为默认值来表示该信号?

Bonus:如果有一种方法可以让rails为db列添加一个不同于空字符串的检查,并且只有在它们同时具有非空约束和非空约束时才自动为字符串字段添加存在验证空字符串检查,这将是非常好的。只是不知道这是否可能。

+2

一旦你理解了NULL的处理,它的性质将会变得令人惊讶的不那么令人惊讶。 – 2012-08-03 18:58:10

+0

是的,但预防也很好。特别是当你在谈论如何管理一支有营业额的团队时。 – snowguy 2012-08-03 20:03:18

回答

1

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