2014-06-29 53 views
1

我具有低於合併2個ActiveRecords相同類型的成一個

class Order < ActiveRecord::Base 
    has_many :lineitems, dependent: :destroy 
end 

class Lineitem < ActiveRecord::Base 
    belongs_to :order 
end 

我有2個訂單具有不同行項目一個有效記錄的關聯。

我想合併這2個訂單到一個新的訂單,然後刪除以前的2個記錄。

有沒有簡單的方法來實現這一點,而不創建新的lineitems?

我想要的是指向新訂單的相同lineitems。而不是製作新的副本。

回答

2

您可以通過這種方式做到這一點:

  1. 新建訂單

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

  2. 採取一切LineItem的是屬於另外兩個訂單。例如。與IDS 1和2 ,並附上訂單的所有LineItemsnew_order

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

  3. 刪除舊訂單

    Order.where(id: [1, 2]).destroy_all

+0

感謝那些工作完全 – pramodh

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 
+0

這個職位被自動標記爲低質量,因爲它只是合作德。你介意加入一些文字來解釋它是如何解決問題的嗎? – gung

+0

在這個解決方案中,當o1和o2被銷燬時,lineitems被刪除。如果存在o1和o2,它工作正常。 – pramodh