我试图在ETL过程中规范化一些数据,因为我们获得的数据不一致。
烦人但我在这里学习。
目前我们做的事情如下:
received = datum[:quantity_received] || datum[:received_cases] || datum[:received_quantity]
好奇是否有更多的ruby / rails方式吗?
考虑:
received = datum.values_at(:quantity_received,:received_cases,:received_quantity).compact.first
答案 0 :(得分:1)
我认为没有更好的解决方案。我试着定义一些辅助方法(我不是长行'支持者)
def value_you_need(datum)
datum.values_at(*keys_of_interest).find(&:itself)
end
def keys_of_interest
%i(quantity_received received_cases received_quantity)
end
received = value_you_need(datum)
ruby 2.2.0中存在 object#itself
方法。否则,请转到compact.first
。
请注意详细信息:如果false
是您关注的值之一,compact.first
解决方案是我们三个中唯一正确的解决方案。但我理所当然地认为你没有,或者第一种选择是错误的。