我有一个变成哈希的存储并存储在变量
中@keys_values_hash = Hash[CategoryItemValue.where(category_item_id: @category_item.id).pluck(:key, :value)]
如果2个记录具有相同的:key
名称,则仅使用最新记录,并且它们都不会添加到哈希中。但如果它们具有相同的value
且不同的keys
,则两者都会添加到哈希值中。
如果我在:key
周围交换:value
和.pluck(:value, :key)
,也会发生这种情况。如果它们现在具有相同的value
,则它仅使用最新的一个并将其存储在哈希中。但是拥有相同的key
现在很好。
我不确定这是由pluck还是在哈希中排序引起的。我倾向于采摘成为罪魁祸首。
造成这种情况的原因是什么,以及如何阻止它发生。如果数据与另一条记录具有相同的key
名称,我不希望跳过数据。
答案 0 :(得分:1)
我不确定为什么你需要将pluck结果转换为Hash,因为它是一个Array原始。
就像你有三个CategoryItemValue
如下:
id, key, value
1, foo, bar1
2, foo, bar2
3, baz, bar3
当你直接采摘它们时,你会得到一个如下数组:
[ ['foo', 'bar1'], ['foo', 'bar2'], ['baz', 'bar3'] ]
但是当你把它转换为哈希时,你会得到:
{'foo' => 'bar2', 'baz' => 'bar3' }
因为如果密钥(上例中的foo
)存在,则新哈希值将覆盖旧哈希值。
或者你可以尝试Enumerable#group_by
方法:
CategoryItemValue.where(...).pluck(:key, :value).group_by { |arr| arr[0] }