即使在从数据库中删除数据之后,也应该在变量中存在数据数组

时间:2013-12-11 06:47:51

标签: 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

但它返回一个空数组#<ActiveRecord::AssociationRelation []>

1 个答案:

答案 0 :(得分:1)

Ruby使用对存储变量的引用。因此,实际上slot_listbanner_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。即使它可以做到这一点,我不建议你这样做。而是尝试另一种方式。