我在
下面有一个活跃的记录协会class Order < ActiveRecord::Base
has_many :lineitems, dependent: :destroy
end
class Lineitem < ActiveRecord::Base
belongs_to :order
end
我有两个包含不同订单项的订单。
我想将这两个订单合并到一个新订单,然后删除之前的两个记录。
有没有一种简单的方法可以实现这一点,而无需创建新的lineitems?
我想要的是指向新订单的相同lineitems。而不是制作新的副本。
答案 0 :(得分:2)
你可以这样做:
创建新订单
new_order=Order.create #Pass additional parameters to create method if needed
获取属于其他两个订单的所有LineItem。例如。带有ID 1和2的订单。
并将所有LineItems
附加到new_order
:
LineItem.where(order_id: [1, 2]).update_all(order_id: new_order.id)
删除旧订单
Order.where(id: [1, 2]).destroy_all
答案 1 :(得分:0)
o1 = Order.find(1)
o2 = Order.find(2)
# create new one, and assign lineitems to the new order
o3 = Order.create(...)
o3.lineitems = o1.lineitems + o2.lineitems
# destroy the old order
o1.destroy
o2.destroy