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

Nei*_*eil 1 ruby activerecord ruby-on-rails

我正在尝试创建一个新记录,它是现有记录的精确副本,但我需要新记录当然要有一个独特的记录id.含义:我不想id将现有记录复制到新记录.

目前的代码

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

@copy_of_existing_blog = Blog.new(@blog.attributes)
@copy_of_existing_blog.save
Run Code Online (Sandbox Code Playgroud)

它返回此错误:

的ActiveRecord :: RecordNotUnique

我理解为什么它出错了.它试图保存具有id现有记录副本的记录.我只是不知道如何制作一个记录的精确副本,减去id,并将其保存到数据库中.

max*_*max 9

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

Blog.new(@blog.attributes.except("id"))
Run Code Online (Sandbox Code Playgroud)

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