0

我不喜欢数据库中的空值

多年来,我已经看到由于 null 有时令人惊讶的性质而出现了太多错误。特别是对于我们不希望包含空值的列,我们很容易无法考虑它们的含义并得到不好的结果。我坚信字符串字段的空性(如果允许)通常应在数据库中表示为空字符串与空字符串。(但最糟糕的是允许将两者混合在一起,它们的含义相同。)

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

到目前为止,一切都很好。

我喜欢 ruby​​ 如何处理默认值

当我这样做时,我注意到 ActiveRecord 采用我在数据库中定义的默认值,并使用该值初始化对象的属性。我喜欢那个!

但这让我想要更多。因为现在我发现我正在添加类似的代码

validates :name, :presence => true

除了我选择提供默认空字符串的情况外,我在数据库中定义了非空约束的所有情况。但是我为什么要重复自己呢?所以我在想——如果 ActiveRecord 为我做这件事不是很好吗?

如何从数据库属性添加验证存在

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

奖励:如果有一种方法可以让 rails 在 db 列中添加对不同于空字符串的检查,然后仅在字符串字段同时具有非空约束和非空字符串检查时才自动添加对存在性的验证,那真是太好了。只是不知道这是否可能。

4

1 回答 1

1

我想你可以通过添加一个默认进行验证的观察者来实现类似的效果。但是,我不确定是否有办法从观察者方法中取消操作,就像您可以使用回调一样。

于 2012-08-03T18:04:58.720 回答