从活动记录中的数组中删除元素

时间:2019-03-27 15:04:19

标签: 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)

3 个答案:

答案 0 :(得分:0)

您尝试过类似的事情

new_channles = tv_info.channels.select { |c| c != :b }
tv_info.update(channels: new_channels)

答案 1 :(得分:0)

只需直接访问存储在通道下的数组即可:

tv_info.tap { |hash| hash[:channels].delete(:b) }

这使用了:

  • tap,以确保返回所有修改后的哈希值
  • delete从数组中删除匹配的元素。

希望能有所帮助,如果您有任何疑问或问题,请告诉我。

答案 2 :(得分:0)

您可以使用以下方法删除:b

tv_info[:channels].delete(:b)

希望对您有帮助:D