有没有办法在更新中从一个数组属性中删除一个数字? 例如,如果我想更新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属性数组中),它将被删除。
我想你可以用下面的方法来做你想要的事情。
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
它只会返回那些可用的。