ruby-on-rails - 当我需要模型关系时,我如何防止错误?

标签 ruby-on-rails ruby model

我有一个应用程序有很多数据库关系,这些数据库关系相互依赖才能成功运行该应用程序。应用程序中的铰链是一个称为 Schedule 的模型,但该计划将拉取 Blocks、一个 Employee、一个 JobTitle 和一个 Assignment(除此之外,每个 Block 也会从数据库中拉取一个分配)到全天组装员工时间表。

当我构建应用程序时,我非常重视验证,以确保在将所有内容保存到数据库之前所有部分都已到位。到目前为止,效果非常好,该应用程序已经上线并运行了将近 6 个月,每月处理大约 150,000 个请求,没有出现任何问题或错误。直到上周。

上周,当有人在更改时间表时,数据库似乎出错了,一​​个时间表被保存到数据库中,但它的 Assignment 丢失了。因为关联在每个 View 中都被调用,所以每当从数据库中调用此计划时,应用程序都会抛出一个 NoMethod 错误以调用 nil。

按照我所说的方式设计应用程序时,您是否防止数据库/验证方面可能出现的故障?如果是这样,您如何以编程方式防御它?在将其发送到 View 之前,您是否检查每个关系以确保它不是零?

我知道这个问题泛泛而谈,如果我能更具体地表达我的意思,请在评论中告诉我。

最佳答案

我建议添加 database-enforced foreign key constraintswrapping important groups of operations into transactions .

如果在 Schedule 和 Assignment 之间存在外键,数据库强制执行的外键约束会阻止错误的插入。此外,如果将特定操作包装在事务中,则可以确保整个插入/更新/删除流发生或失败,恢复到干净状态。

关于ruby-on-rails - 当我需要模型关系时,我如何防止错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803820/

相关文章:

ruby-on-rails - 模型应该在 Rails 中命名吗?

html - 选择带标签的单选按钮

ruby-on-rails - Ruby 中的 Mechanize 和 SSLError

ruby-on-rails - 使用 ActiveSupport::Concern 重载类方法

ruby - 如何在 ruby​​ 中使用 Selenium WebDriver (selenium 2.0) 客户端设置一个选项

ruby-on-rails - Rails 测试密码重置失败 --- 预期+++ 实际@@ -1 +1,40 @@

model - 了解 YANG 及其目标

ruby-on-rails - Rails eager_load 实例上的深层关联

ruby-on-rails - 为什么 Grails findOrSaveBy* 动态查找器不接受第二个参数进行创建?

c# - Debug模式与 Release模式 - IsJITOptimizerDisabled 属性