#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
У меня есть объект, который выглядит следующим образом
tv_info _id: 237827483784783, channels: [:a, :b, :c]
Как бы я удалил только :b
из каналов, чтобы это выглядело как
tv_info _id: 237827483784783, channels: [:a, :c]
Я нашел только метод обновления, но не метод удаления. Для
пример
tv_info.update(channels: :a)
Изменило бы его на
tv_info _id: 237827483784783, channels: [:a]
но мне нужно сохранить :c
Я ищу что-то вроде
tv_info.delete(channels: :b)
Комментарии:
1. По крайней мере, это не похоже на допустимое буквальное выражение какого-либо объекта. Что это за объект?
Ответ №1:
Вы можете удалить :b
с помощью:
tv_info[:channels].delete(:b)
Надеюсь, это поможет: D
Комментарии:
1. Разве это не то же самое, что в моем ответе?
Ответ №2:
Вы пробовали что-нибудь вроде
new_channles = tv_info.channels.select { |c| c != :b }
tv_info.update(channels: new_channels)
?
Ответ №3:
Просто получите доступ к массиву, хранящемуся в разделе каналы напрямую:
tv_info.tap { |hash| hash[:channels].delete(:b) }
При этом используется :
tap
для обеспечения возврата всего измененного хэшаdelete
чтобы удалить соответствующие элементы из массива.
Надеюсь, это поможет, дайте мне знать, если у вас возникнут какие-либо вопросы или недочеты.