Ruby on rails 复制记录并保存到数据库,但id唯一

Ruby on rails 复制记录并保存到数据库,但id唯一,ruby-on-rails,ruby,activerecord,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
从现有记录复制到新记录

现行代码

@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
,并将其保存到数据库。

您需要从属性散列中筛选出id。ActiveSupport有一种简便的方法,可以实现以下功能:

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

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

数据库中的id是否自动递增???@mamamadoulamineniang是。
。除了
与引擎盖下的操作完全相同。这是正确答案,但键应该是字符串,而不是符号
Blog.new(@Blog.attributes.except(“id”))
attributes方法中的
id
键应该是已知的。这可以使用
@blog.attributes.except(:id)
或此
@blog.attributes.except(“id”)
,因为属性返回一个简单的散列,其键类似于字符串,而不是
hashWithInferenceTaccess
。ps现在很好+1编辑,忘记了属性不是无关访问。谢谢。你可能想过滤掉时间戳的原因是,如果“复制”的博客记录与旧记录具有相同的时间戳,那么任何缓存都可能不会正确地失效。