Удаление элемента из массива в активной записи

#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 чтобы удалить соответствующие элементы из массива.

Надеюсь, это поможет, дайте мне знать, если у вас возникнут какие-либо вопросы или недочеты.