Pluck 没有 return 打扰记录他们有相同的名字
Pluck doesn't return a bother records they have the same name
我有一个 pluck 被转换成散列并存储在一个变量中
@keys_values_hash = Hash[CategoryItemValue.where(category_item_id: @category_item.id).pluck(:key, :value)]
如果 2 条记录具有相同的 :key
名称,则仅使用最近的记录,它们不会同时添加到哈希中。但是如果它们具有相同的 value
和不同的 keys
两者都被添加到散列中。
如果我在 (.pluck(:value, :key)
) 周围交换 :key
和 :value
,也会发生这种情况。如果他们现在有相同的 value
它只使用最近的一个并将其存储在哈希中。但是拥有相同的 key
现在没问题了。
我不确定这是由 pluck 引起的,还是由哈希排序引起的。我倾向于 pluck 是罪魁祸首。
这是什么原因造成的,我该如何阻止它发生。我不想跳过与另一条记录具有相同 key
名称的数据。
我不确定你为什么需要将 pluck 结果转换为哈希,因为它是一个原始数组。
就像你有三个 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] }
我有一个 pluck 被转换成散列并存储在一个变量中
@keys_values_hash = Hash[CategoryItemValue.where(category_item_id: @category_item.id).pluck(:key, :value)]
如果 2 条记录具有相同的 :key
名称,则仅使用最近的记录,它们不会同时添加到哈希中。但是如果它们具有相同的 value
和不同的 keys
两者都被添加到散列中。
如果我在 (.pluck(:value, :key)
) 周围交换 :key
和 :value
,也会发生这种情况。如果他们现在有相同的 value
它只使用最近的一个并将其存储在哈希中。但是拥有相同的 key
现在没问题了。
我不确定这是由 pluck 引起的,还是由哈希排序引起的。我倾向于 pluck 是罪魁祸首。
这是什么原因造成的,我该如何阻止它发生。我不想跳过与另一条记录具有相同 key
名称的数据。
我不确定你为什么需要将 pluck 结果转换为哈希,因为它是一个原始数组。
就像你有三个 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] }