我正在为两个变量分配插槽,但是当我使用一个变量删除插槽时,数据也会从另一个变量中删除。我想将数据保存在其他变量中。请帮忙!
slot_list = banner_slots = slots.where(:slot_datetime => date_begin..(startdate - 2.minutes))
banner_slots.delete_all
p slot_list
但它返回一个空数组#<ActiveRecord::AssociationRelation []>
答案 0 :(得分:1)
Ruby使用对存储变量的引用。因此,实际上slot_list
和banner_slots
都指向相同的引用。删除一个变量后,另一个变量也会丢失。
通常,要保留您需要克隆的变量。
> a = 'foo'
> b = a
> c = a.clone
> a = 'bar'
> b
# 'bar'
> c
# 'foo'
您还可以在ActiveRecord::Relation
对象上使用克隆。
banner_slots = slots.where(foo: 'bar')
slot_list = banner_slots.clone
banner_slots.delete_all
> slot_list
# will return records EVEN WITH ID!
小心使用。这不是ActiveRecord对象的预期行为。删除一系列对象时,意味着他们获得了 DELETED IN DB 。因此,剩余的slot_list
实际上除了某些属性之外什么都没有。它们不再代表数据库数据。
我只是解释你为什么看到它并介绍clone
。即使它可以做到这一点,我不建议你这样做。而是尝试另一种方式。