0

In rails 3.1, we can validate presence of a field in model with:

validates :name, :presence => true

In db migration file, we also can do

t.string :name, :null => false

It seems that validates checks the data integrity before saving which is better. However db check up only happens during the saving process which may have started actual saving before aborting. Is validates in model better? Thanks so much.

4

2 回答 2

1

在模型中编写验证通常是一种很好的做法,因为它更易于维护,可以在需要时轻松更改,并且将所有核心登录放在一个地方也很好。

当你只在 db 级别编写这样的东西时,编写测试用例就成了一个问题,当你回到后面时,你可能没有意识到你已经在 db 级别编写了这样的“逻辑”。

实际上,我什至在模型上写了我的“默认”值(尽管这可以讨论)。这样做的原因是具有默认选项是业务登录,因此需要在模型级别进行。

由于上述原因,在模型级别编写此类代码是一种很好的做法。

于 2012-05-21T06:29:38.023 回答
0

这是一个老问题,但我今天偶然发现了它,我认为无论您使用的是 Rails 3.1 还是 Rails 6,答案都是一样的:这取决于.

数据库约束和模型验证都存在是有原因的。除了这两个之外,我认为还值得考虑客户端检查的位置。

我的简短回答是:

  • 总是写模型验证
  • 在大多数情况下,使用数据库约束来备份它们
  • 有时添加客户端检查

与大多数事情一样,在学习时坚持这些简单的规则,你就不会出错。稍后你可以开始打破这些规则,一旦你知道你为什么要打破它们。

我在博客上的一篇文章中写下了我更长(“取决于”)的答案(以及我对上述规则的原因)。

于 2019-05-29T03:22:49.557 回答