arrays - Rails更新从数组属性中删除数字?
问题描述
有没有办法在更新中从属性数组中删除一个数字?例如,如果我想在某个特定类型的酒用完时更新一个 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
这只会返回可用的那些。
推荐阅读
- regex - 如何使 fail2ban failregex 工作(“。*”的问题?)?
- python - Python Web Scraping:如何根据最后一个标签中的内容检索“href”
- d3.js - 使用 D3 并通过附加 SVG 绘制两个圆圈
- python - Windows 10:我将 repo 克隆到本地 Windows pc 后无法安装 Python Github 模块
- node.js - MongoDB 聚合:如何在 MongoDB 聚合中应用分页
- r - 在 MacOS Catalina 中安装 R 包时缺少 gfortran
- python - Python - 从大字符串中解析重复的模式
- angular - 如何在 Angular 7 中显示任何系统格式的日期格式?
- cmake - cmake 的 OpenMPI 基目录的位置
- ruby-on-rails - 阶段中的 NoMethodError#edit