从数据库中查找丢失的记录
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
语句,或添加额外的验证或其他任何内容。
我正在尝试验证我的配置。所以我有一段代码:
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
语句,或添加额外的验证或其他任何内容。