Pluck没有回复他们有相同名字的麻烦记录

时间:2016-02-17 04:02:39

标签: ruby-on-rails ruby-on-rails-4 pluck

我有一个变成哈希的存储并存储在变量

@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名称,我不希望跳过数据。

1 个答案:

答案 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] }