rails hash从列表中提取第一个值

时间:2017-11-10 00:39:58

标签: ruby-on-rails ruby

我试图在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

1 个答案:

答案 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解决方案是我们三个中唯一正确的解决方案。但我理所当然地认为你没有,或者第一种选择是错误的。