验证vs db在rails 3.1中检查字段是否存在

时间:2012-05-21 03:39:46

标签: ruby-on-rails ruby-on-rails-3.1

在rails 3.1中,我们可以通过以下方式验证模型中字段的存在:

validates :name, :presence => true

在db迁移文件中,我们也可以

t.string :name, :null => false

似乎验证在保存之前检查数据完整性哪个更好。但是,db检查仅在保存过程中发生,可能在中止之前已开始实际保存。模型中的验证更好吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

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

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

实际上,我甚至在模型上写下了我的“默认”值(尽管可以对此进行辩论)。原因是拥有默认选项是业务登录,因此需要进入模型级别。

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

答案 1 :(得分:0)

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

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

我的简短答案是:

  • 始终编写模型验证
  • 在大多数情况下,使用数据库约束对其进行备份
  • 有时会添加客户端检查

与大多数事情一样,在学习时请遵循这些简单的规则,不会出错。稍后,一旦知道为什么要违反这些规则,便可以开始违反这些规则。

我在post on my blog中写下了更长的答案(“取决于情况”)(以及上述规则的原因)。