Pluck не возвращает надоедливые записи, они имеют одинаковое имя
У меня есть срыв, который превращается в хеш и сохраняется в переменной
@keys_values_hash = Hash[CategoryItemValue.where(category_item_id: @category_item.id).pluck(:key, :value)]
Если 2 записи имеют одинаковые :key
name, тогда используется только самая последняя запись, и они оба не добавляются в хеш. Но если они имеют одинаковые value
и разные keys
оба добавляются в хеш.
Это также происходит, если я поменяюсь :key
а также :value
вокруг (.pluck(:value, :key)
). Если у них сейчас то же самое value
он использует только самый последний и сохраняет его в хэше. Но имея то же самое key
сейчас в порядке.
Я не уверен, что это вызвано извлечением или сортировкой в хеше. Я склоняюсь к срыву, являющемуся виновником.
Что является причиной этого и как я могу предотвратить это. Я не хочу, чтобы данные пропускались, если они имеют одинаковые key
назвать в качестве еще одной записи.
1 ответ
Я не уверен, зачем вам нужно преобразовывать результат в хэш, потому что это был оригинал 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] }