Rails 更新从数组属性中删除数字?
Rails update remove number from an array attribute?
有没有办法在更新中从属性数组中删除一个数字?例如,如果我想在 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
class 中的范围在我看来是正确的方法:
scope :available_boozes, -> { joins(:boozes).where("number > ?", 0) }
您可以通过以下方式使用:
@alchy.stashes.available_boozes
这只会 return 可用的。
有没有办法在更新中从属性数组中删除一个数字?例如,如果我想在 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
class 中的范围在我看来是正确的方法:
scope :available_boozes, -> { joins(:boozes).where("number > ?", 0) }
您可以通过以下方式使用:
@alchy.stashes.available_boozes
这只会 return 可用的。