Ruby on rails 用新创建但未保存的记录替换现有记录

Ruby on rails 用新创建但未保存的记录替换现有记录,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,如果我有已保存在数据库中的记录A,那么我想用未保存的新创建的记录B替换它。因此,B可以保存在数据库中,但id为A(A被替换)。这在Rails活动记录中可能吗 另外,这背后的原因是我需要根据某种条件合并对象,而构建对象需要一些internet抓取/解析。因此,如果使用时间来解析B,我希望防止再次解析A,但将其替换为B。尝试类似的方法(未测试此代码): 尝试类似的操作(未测试此代码): 您可以这样做: a = A.find(1) b = B.new # Modify b a.update_att

如果我有已保存在数据库中的记录A,那么我想用未保存的新创建的记录B替换它。因此,B可以保存在数据库中,但id为A(A被替换)。这在Rails活动记录中可能吗

另外,这背后的原因是我需要根据某种条件合并对象,而构建对象需要一些internet抓取/解析。因此,如果使用时间来解析B,我希望防止再次解析A,但将其替换为B。

尝试类似的方法(未测试此代码):

尝试类似的操作(未测试此代码):


您可以这样做:

a = A.find(1)
b = B.new

# Modify b

a.update_attributes(b.attributes.delete_if{ |k,v| %w(id created_at updated_at).include?(k) })

您可以这样做:

a = A.find(1)
b = B.new

# Modify b

a.update_attributes(b.attributes.delete_if{ |k,v| %w(id created_at updated_at).include?(k) })

这个答案只是更完整一点(创建时不会为零)。谢谢由于您正在从新的、未保存的记录中复制参数,在处创建的
和在
处更新的
记录尚未填充。@MikhailNikalyukin,我想到了与您相同的解决方案,但当我在控制台中尝试时,我发现一个
无法批量分配受保护的属性:id,created\u at,updated\u at
错误。这就是我删除这些属性的原因。这个答案更完整一点(created_at不会为零)。谢谢由于您正在从新的、未保存的记录中复制参数,在
处创建的
和在
处更新的
记录尚未填充。@MikhailNikalyukin,我想到了与您相同的解决方案,但当我在控制台中尝试时,我发现一个
无法批量分配受保护的属性:id,created\u at,updated\u at
错误。这就是我删除这些属性的原因。