我的关系如下:
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
没有任何反应时,另一位客户仍然没有来自原始客户的订单
答案 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