将2个相同类型的ActiveRecords合并为一个

时间:2014-06-29 13:43:42

标签: ruby-on-rails activerecord

我在

下面有一个活跃的记录协会
class Order < ActiveRecord::Base
  has_many :lineitems, dependent: :destroy
end

class Lineitem < ActiveRecord::Base
  belongs_to :order
end

我有两个包含不同订单项的订单。

我想将这两个订单合并到一个新订单,然后删除之前的两个记录。

有没有一种简单的方法可以实现这一点,而无需创建新的lineitems?

我想要的是指向新订单的相同lineitems。而不是制作新的副本。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

  1. 创建新订单

    new_order=Order.create #Pass additional parameters to create method if needed

  2. 获取属于其他两个订单的所有LineItem。例如。带有ID 1和2的订单。 并将所有LineItems附加到new_order

    LineItem.where(order_id: [1, 2]).update_all(order_id: new_order.id)

  3. 删除旧订单

    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