此查询响应包含计算的delta
对,以便我不必在数据库中不必要地创建另一列。
records = [
{"credential_id"=>1, "followers_count"=>10000, "created_at"=>"2017-02-26 18:50:20.654996", "delta"=>nil},
{"credential_id"=>1, "followers_count"=>12000, "created_at"=>"2017-02-27 18:50:20.654996", "delta"=>2000},
{"credential_id"=>1, "followers_count"=>15000, "created_at"=>"2017-02-28 18:50:20.654996", "delta"=>3000}
]
期望的结果:
deltas = [
[2017-02-26 18:50:20.654996, nil],
[2017-02-27 18:50:20.654996, 2000],
[2017-02-28 18:50:20.654996, 3000]
]
尝试 - 但是,我认为:delta
不属于模型/表的事实阻止我使用以下解决方案:.pluck(:created_at, :delta)
,{{ 1}}和
.values_at("created_at", "delta")
我已经没有尝试过的解决方案了。你能帮我找到想要的结果吗?
答案 0 :(得分:1)
这很简单:
records.map { |h| [h['created_at'], h['delta']] }
=> [["2017-02-26 18:50:20.654996", nil],
["2017-02-27 18:50:20.654996", 2000],
["2017-02-28 18:50:20.654996", 3000]]
在Ruby中,您可以通过在括号中传递键名来访问哈希值,就像在这个例子中一样。
或者您可以使用Hash#values_at
:
records.map { |h| h.values_at('created_at', 'delta') }
并获得相同的结果。
答案 1 :(得分:0)
您只需要使用.map
迭代记录哈希,然后分配' created_at'和' delta'字段到新数组。 Array#map
允许您随时改变起始对象。
records.map {|r| [r['created_at'], r['delta']]}
来自文档:
阵列#地图
创建一个包含块返回值的新数组。
答案 2 :(得分:0)
用字符串替换属性符号:
attributes = ['created_at', 'delta']