在Rails中,何时应该使用验证而不是数据库限制?

时间:2017-02-21 21:57:17

标签: ruby-on-rails

在Rails中,为了验证信息,您可以使用验证或数据库限制。

即:

迁移:

 t.string "name", :limit => 25

模型验证:

validates_length_of :name, :maximum => 25

我了解验证可以防止表单提交,迁移/数据库限制会阻止数据保存到数据库中。但只是好奇,何时应该使用验证或数据库限制,或同时使用两者?

2 个答案:

答案 0 :(得分:2)

验证很快,因为在您知道数据是否有效之前,它们不一定需要往返数据库(为了它们的唯一性)。验证的缺点是,即使您具有唯一性验证,它也不能100%保证数据库中的唯一性。这是因为两个线程都可以检查唯一性,然后同时向数据库添加记录,最终导致唯一性检查失败。出于这个原因,任何唯一性验证应始终在数据库中指定,并且通常也在模型上指定(如果一个线程/进程在另一个线程检查了存在但没有插入新的关联记录之后立即删除它,则存在类似的记录存在问题) 。可以在模型上指定其他格式/长度/等验证,它们很容易更新/更改。

答案 1 :(得分:1)

如果你在数据库级别使用限制,那么很难知道它发生了什么。如果将其添加到验证中,则清除模型。它更容易改变,而且对所有开发人员来说都是清楚的。

我喜欢验证,如果可以的话我可以使用它并避免数据库限制

我希望这会有所帮助:)