Rails :: ActiveRecord在深拷贝副本中保留auto_increment id
我需要创建一个包含要操作的模型对象的临时数组。 我需要auto_increment主键,但我不希望保持关联,因为当我从数组中删除它时,它也将它从数据库中删除(感谢rails,非常不方便)。 我使用object.dup创建的深层副本的id标记为nil。 如何将它们保存在副本中?
dup
描述了这种行为:
Duped对象没有分配id,并被视为新记录。
dup方法不保留时间戳(已创建|已更新)_(at | on)。
这样做是因为人们几乎总是希望复制记录以便将其新副本保存到数据库中。
如果你需要一个真正相同的副本, clone
会做到这一点,但它几乎不是你需要的:你几乎肯定只想要另一个对同一个对象的引用。
在这种情况下,从上下文和其他注释中,我了解到您的目标是记录列表,这样您就可以删除条目而不会影响数据库。
为此,您只需要to_a
。 听起来你现在有一个ActiveRecord :: Associations :: CollectionProxy (如果不是,一个ActiveRecord :: Relation ),它就像一个数组,但代表了数据库中的相关集:它允许的操作,会立即反映出来在数据库中。 to_a
将为您提供代表该列表的普通Ruby数组; 然后,您可以随心所欲地操纵该arrays。 (根据这个答案的前半部分,这种情况下你不需要复制单个记录……你只需要在一个简单的数组中使用它们。)