从数据库复制/克隆对象

时间:2013-07-18 15:42:11

标签: ruby-on-rails ruby

我的关系如下:

Customer has many Orders
Order has many Parts

我要做的是将订单/零件分配给另一个客户,但我想保留原始客户/订单/零件关系。所以我尝试了这个(假设customer是一个Customer实例)

another_customer_id = 22
customer.orders.each do |order|
  ord = order.dup
  ord.customer_id = another_customer_id
  ord.save!
  order.parts.each do |part|
    prt = part.dup
    prt.order_id = ord.id
    prt.save!
  end
end

所以我假设曾经customer_two.orders我会像第一个客户那样得到一切,但奇怪的是我没有。似乎第一个客户的订单/部件增加了一倍。

我怎样才能更好地做到这一点?

更新

当我使用.dup方法时,原始客户订单在数据库中加倍。 当我使用.clone代替.dup没有任何反应时,另一位客户仍然没有来自原始客户的订单

1 个答案:

答案 0 :(得分:2)

如果你使用Rails> = 3.1,你在这里的代码对我来说是合理的。在Rails 3.1之前,您需要使用clone而不是dup。但是,您可以尝试另一种方法:

another_customer_id = 22
customer.orders.each do |order|
  ord = Order.create(order.attributes.merge(:customer_id => another_customer_id))
  order.parts.each do |part|
    Part.create(part.attributes.merge(:order_id => ord.id))
  end
end