Ruby on rails 用新创建但未保存的记录替换现有记录
如果我有已保存在数据库中的记录A,那么我想用未保存的新创建的记录B替换它。因此,B可以保存在数据库中,但id为A(A被替换)。这在Rails活动记录中可能吗 另外,这背后的原因是我需要根据某种条件合并对象,而构建对象需要一些internet抓取/解析。因此,如果使用时间来解析B,我希望防止再次解析A,但将其替换为B。尝试类似的方法(未测试此代码): 尝试类似的操作(未测试此代码):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 = 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
错误。这就是我删除这些属性的原因。