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

时间:2018-07-09 21:15:19

标签: ruby-on-rails ruby ruby-on-rails-4

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

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

如果有人忘记在配置或b上设置密钥a,我希望能够找到丢失的密钥。现在,我意识到该记录实际上并不存在于db中,因此没有什么可以找到和实例化ConfigurationAttribute记录。

您将如何解决这样的问题?

我可以检查属性计数是否等于3,这将确保是否设置了所有键。但是再说一次,如果我要解决此错误,我会很沮丧,因为我不知道缺少哪一个,我必须去找一个失踪的人。

1 个答案:

答案 0 :(得分:1)

您可以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语句,或添加其他验证,等等。