0

我的关系如下:

Customer has many Orders
Order has many Parts

我要做的是将订单/零件分配给另一个客户,但我想保留原始客户/订单/零件的关系。所以我尝试了这个(假设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没有任何反应时,另一个客户仍然没有来自原始客户的订单

4

1 回答 1

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
于 2013-07-18T16:35:37.070 回答