Ruby on rails 即使从数据库中删除了变量,变量中也应该有数据数组

Ruby on rails 即使从数据库中删除了变量,变量中也应该有数据数组,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我将插槽分配给两个变量,但当我使用一个变量删除插槽时,数据也会从另一个变量中删除。我想把数据保存在其他变量中。请帮忙 slot_list = banner_slots = slots.where(:slot_datetime => date_begin..(startdate - 2.minutes)) banner_slots.delete_all p slot_list 但是它返回一个空数组#Ruby使用引用存储变量。因此,实际上slot\u list和banner\u slot都指

我将插槽分配给两个变量,但当我使用一个变量删除插槽时,数据也会从另一个变量中删除。我想把数据保存在其他变量中。请帮忙

slot_list = banner_slots = slots.where(:slot_datetime => date_begin..(startdate - 2.minutes))
banner_slots.delete_all
p slot_list

但是它返回一个空数组
#

Ruby使用引用存储变量。因此,实际上
slot\u list
banner\u slot
都指向相同的引用。一旦一个变量被删除,另一个变量也会丢失引用

通常,要保留变量,需要克隆

> a = 'foo'
> b = a
> c = a.clone

> a = 'bar'
> b
# 'bar'
> c
# 'foo'
您还可以在
ActiveRecord::Relation
对象上使用clone

banner_slots = slots.where(foo: 'bar')
slot_list = banner_slots.clone
banner_slots.delete_all
> slot_list
# will return records EVEN WITH ID!
使用时要小心。这不是ActiveRecord对象的预期行为。当您删除一系列对象时,这意味着它们在DB中被删除。因此,保留的带有ID的
slot\u列表
实际上只意味着一些属性。它们不能再表示db数据了

我只是解释一下你为什么会看到这一点,并介绍了
clone
。即使它可能会起作用,我也不建议你这样做。相反,尝试另一种方法