制作记录副本并保存到数据库但具有唯一ID

时间:2016-04-16 16:54:25

标签: ruby-on-rails ruby activerecord

我正在尝试制作一条新记录,它是现有记录的精确副本,但我需要新记录当然要有一个唯一的id。含义:我不想将id从现有记录复制到新记录。

当前代码

@blog = Blog.new(title: "some title")
@blog.save

@copy_of_existing_blog = Blog.new(@blog.attributes)
@copy_of_existing_blog.save

它返回此错误:

  

的ActiveRecord :: RecordNotUnique

我明白为什么会出错。它正在尝试保存具有现有记录的重复id的记录。我只是不知道如何制作记录的精确副本,减去id,并将其保存到数据库中。

1 个答案:

答案 0 :(得分:9)

您需要从属性哈希中过滤掉ID。 ActiveSupport有一个方便的Hash#except方法,它可以做到这一点:

Blog.new(@blog.attributes.except("id"))

此外,您可能还想过滤掉时间戳。