2013-07-24 49 views
0

我有owners,它有很多notes。我想高效地將許多所有者添加相同的新note作爲單個記錄,因此我可以稍後更改每個owner而不影響其他owners向許多父項添加一個子項

owners我需要添加note作爲此處的ID列表(從多選列表中選擇)。

有沒有比下面更高效的方法?

owner_ids = [1,2,3,4] 
note = Note.new(params[:note]) 
owner_ids.each do |owner_id| 
    Owner.find(owner_id).notes << note 
end 

OR

owner_ids = [1,2,3,4] 
owner_ids.each do |owner_id| 
    Note.create(owner_id: owner_id, subject: params[:note][:subject], content: params[:note][:content]) 
end 

使用Ruby 2與軌道4

回答

1

您可以使用ActiveRecord事務方法,它將在一個事務中執行SQL。這樣可以節省你的一段時間

ActiveRecord::Base.transaction do 
    owner_ids.each do |owner_id| 
    Note.create(owner_id: owner_id, subject: params[:note][:subject], content: params[:note][:content]) 
    end 
end 

而且看看activerecord-import gem,也許它會滿足您的需求更好。

+0

感謝米哈伊爾,大概是寶石基本上做你的代碼建議 - 圍繞進口包裝交易。我會放棄它,或者退回到交易區塊。 TA! – Matt

1
owner_ids = [1,2,3,4] 
owner_ids.each do |owner_id| 
    Note.create(params[:note].merge({owner_id: owner_id})) 
end 

UPD:包裝事務中的所有創作過一個好主意。

+0

感謝亞歷克斯,贊成參數合併的建議,但我認爲米哈伊爾斯答案的進口寶石是我會走的路。 – Matt

相關問題