从数据库中查找丢失的记录

Finding missing records from db

我正在尝试验证我的配置。所以我有一段代码:

ConfigurationAttribute.where(key: [
    'a', 'b', 'c'
  ])

如果有人忘记设置密钥 a,在配置或 b 上,我希望能够找到丢失的那些。现在我意识到该记录实际上并不存在于数据库中,因此无法从中找到和实例化 ConfigurationAttribute 记录。

你会如何解决这样的问题?

我可以检查属性的数量是否等于 3,这将确保是否设置了所有键。但是话又说回来,如果我正在解决这个错误,我会很沮丧,因为我不知道遗漏了哪个,我将不得不去一个一个地寻找遗漏的人。

您可以 pluck 来自该查询的键,并将其与预期的集合进行比较:

required_keys = ['a', 'b', 'c']
actual_keys = ConfigurationAttribute.where(key: required_keys).pluck(:key)

if actual_keys != required_keys
  # This could be a model validation, or whatever. But for example:
  raise "Whoops! You configuration contains the keys: #{actual_keys}. Should contain: #{required_keys}"
end

确切的实现细节可能略有不同——例如,同一个键可能有多个 ConfigurationAttribute?也许 不能 有任何 ConfigurationAttribute 用于不同的键?也许 required_keys 取决于某些条件(在这种情况下,这可能是方法调用而不是变量)? ...

... 在这种情况下,您可能希望修改该查询或 if 语句,或添加额外的验证或其他任何内容。