【问题标题】:What are the major differences in SQL level validations and model level validations in rails [duplicate]Rails中SQL级别验证和模型级别验证的主要区别是什么[重复]
【发布时间】:2015-08-27 10:31:39
【问题描述】:

我所说的 SQL 级别验证是指我们在迁移中进行的验证 像这样:

add_column :leads, :count, null: false

我所说的模型级验证是指我们在模型中进行的验证,如下所示:

validates_presence_of :count

这两者有何不同?两者兼有有何帮助?我只进行模型级验证就足够了吗?

【问题讨论】:

  • 你检查了吗? stackoverflow.com/questions/2367281/…。从链接中引用“我强烈建议在这两个地方都这样做。在模型中执行它可以为您节省一个数据库查询(可能通过网络),这基本上会出错,并且在数据库中执行它可以保证数据一致性。”跨度>

标签: ruby-on-rails validation rails-models


【解决方案1】:

SQL 验证在数据库级别执行,如果不在模型中实现它们可能会导致从 db 层引发一些异常(基本上来自 mysql/pg/put-your-adapter gem)。

在针对数据库运行查询之前执行模型级别验证。

最好的选择是两者兼得。即使您的模型验证出现问题 - 它也会在数据库级别被捕获。 这里很好的例子是unique 约束。如果您的数据库负载很大,您可能会遇到race condition 问题,并且这里的模型验证还不够。由于具有唯一约束,您可以确保您的数据完整性受到保护。

【讨论】:

    【解决方案2】:

    模型级验证通过在出现验证错误时提供用户错误消息来帮助您。和其他帮助者一样有效?检查对象是否准备好插入的方法。

    同时,数据库级别的验证可确保您的数据库在数据库层的完整性。

    也就是说,您始终可以在模型级别进行更复杂的基于业务逻辑的验证,这可能是通过涉及和转换少数其他表中的数据。

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2012-06-23
      • 2011-02-16
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多