У меня есть условие, где я получаю хэш
hash = {"_id"=>"4de7140772f8be03da000018", .....}
и я хочу этот хеш как
hash = {"id"=>"4de7140772f8be03da000018", ......}
PS : я не знаю, какие ключи в хэше, они случайные, для каждого ключа идет префикс "_", и я не хочу подчеркивания
ruby-on-rails
ruby
ruby-on-rails-3
hash
Маниш дас
источник
источник
_id
ключиid
в массиве документов MongoDBОтветы:
источник
hash.delete :old_key
возвращаемого значения, а при удалении используется старый ключ. Ух ты, я хочу, чтобы это было где-то татуировано :-D СпасибоУ хешей rails есть стандартный метод:
http://api.rubyonrails.org/classes/Hash.html#method-i-transform_keys
UPD: метод ruby 2.5
источник
Если все ключи являются строками и все они имеют префикс подчеркивания, то вы можете исправить хеш на месте с помощью этого:
k[1, k.length - 1]
Немного захватывает все ,k
кроме первого символа. Если вам нужна копия, то:Или
Вы также можете использовать,
sub
если вам не нравитсяk[]
запись для извлечения подстроки:И, если только некоторые ключи имеют префикс подчеркивания:
Подобные модификации могут быть сделаны для всех других вариантов выше, но эти два:
должно быть хорошо с ключами, которые не имеют префиксов подчеркивания без дополнительных модификаций.
источник
ты можешь сделать
Это должно работать для вашего случая!
источник
Если мы хотим переименовать конкретный ключ в хеш, то мы можем сделать это следующим образом:
Предположим, что мой хеш
my_hash = {'test' => 'ruby hash demo'}
теперь я хочу заменить «test» на «message», тогда:
my_hash['message'] = my_hash.delete('test')
источник
hash[:new_key] = has[:old_key]
вместо этого:,hash[:dynamic_key] = hash[:_dynamic_key]
это был ясный вопрос о регулярных выражениях, а не простая замена хеша.источник
источник
Я перебрал и придумал следующее. Моя мотивация заключалась в том, чтобы добавить к ключам хеша, чтобы избежать конфликтов областей при объединении / сглаживании хешей.
Примеры
Расширить класс хэша
Добавляет метод повторного ввода в экземпляры Hash.
Пример Prepend
Пример обрезки
Сглаживание и добавление "Scope"
Если вы передадите хэш обратно, он объединит хеш, который позволит вам сгладить коллекции. Это позволяет нам добавлять область действия к нашим ключам при выравнивании хэша, чтобы избежать перезаписи ключа при слиянии.
источник
Предыдущие ответы достаточно хороши, но они могут обновить исходные данные. Если вы не хотите, чтобы исходные данные были затронуты, вы можете попробовать мой код.
Сначала он игнорирует ключ '_id', затем объединяется с обновленным.
источник