Rails更新从数组属性中删除数字?

问题描述 投票:-1回答:1

有没有办法在更新中从一个数组属性中删除一个数字? 例如,如果我想更新alchy的所有酒库,如果他用完了某一类型的酒。

Alchy has_many :stashes

Stash.available_booze_types = [] (filled with booze.ids)

Booze is also a class

@booze.id = 7

if @booze.is_all_gone
  @alchy.stashes.update(available_booze_types: "remove @booze.id")
end

更新: @booze.id可能存在于available_booze_types数组中,也可能不存在。

......所以如果@booze.id在任何一个Alchy.stash实例中(在available_booze_types属性数组中),它将被删除。

arrays ruby destroy
1个回答
1
投票

我想你可以用下面的方法来做你想要的事情。

if @booze.is_all_gone
  @alchy.stashes.each do |stash|
    stash.available_booze_types.delete(@booze.id)
  end
end

然而,在我看来,有更好的方法来实现你的想法。Rails通过使用关系为你提供了类似数组的东西。此外,如果您重置了应用程序,数组中的数据将丢失(如果我理解的是 available_booze_types 是一个不存储在数据库中的属性)。) 如果你的应用程序被正确地设置了(一个储藏室有许多酒),像下面这样的作用域在 Stash 类在我看来是正确的方法。

scope :available_boozes, -> { joins(:boozes).where("number > ?", 0) }

你可以用下面的方法来使用它

@alchy.stashes.available_boozes

它只会返回那些可用的。

© www.soinside.com 2019 - 2024. All rights reserved.