Есть несколько способов решения этой общей задачи
отклонять
Это тот, который я чаще всего использую для очистки хэшей как своих коротких, чистых и достаточно гибких для поддержки любого условного и не мутирует исходный объект. Вот good article о преимуществах неизменности в рубине.
hash.reject {|_,v| v.blank?}
Примечание: Подчеркивание в приведенном выше примере используется для указания того, что мы хотим распаковать кортеж, переданный в прок, но мы не используем первое значение (ключ).
Отклонить!
Однако, если вы хотите, чтобы мутировать исходный объект:
hash.reject! {|_,v| v.blank?}
выберите
С другой стороны, вы используете выбор, который будет возвращать только те значения, которые возвращают истинное при оценке
hash.select {|_,v| v.present? }
Выбрать!
... и мутирует версия
hash.select {|_,v| v.present? }
компактный
Наконец, когда вы только нужно удалить ключи, которые имеют значения nil
...
hash.compact
компактный!
Вы уже выбрали шаблон, но это версия, которая модифицирует оригинальный хэш!
hash.compact!
вы хотите сохранить 'Do? –