2013-02-02 32 views
2

我需要在Rails中複製記錄,然後在創建記錄之前將其呈現爲新表單。Rails中的重複記錄並使用其關聯填充新表單

一切正常以下this有用的答案,但我需要填充has_many_belongs_to_many協會的記錄,以及

方法DUP()讓我重複的記錄,但它的一切關聯,我也看到了有一個寶石Amoeba,可以做一個非常靈活的深度克隆,但我不知道是否有一個更簡單的解決方案,而不使用寶石

回答

6

Rails沒有內置的深度克隆。在Rails 2.3.x中,您有用於克隆活動記錄屬性的clone。在Rails> 3中,他們將此方法重命名爲dup,其文檔現在缺失。但是,它與clone相同,其文檔如下所示。

請注意,這是一個「淺」克隆:它僅複製對象的屬性 而不是它的關聯。 「深」克隆的程度是 特定於應用程序,因此根據其需要留給應用程序執行到 。

所以,如果你想克隆關聯,你是你自己的。在我的項目中,我爲此使用了一種名爲replicate的方法。

class User < ActiveRecord::Base 
    # ... 
    def replicate 
    replica = dup 

    comments.each do |comment| 
     replica.comments << comment.dup 
    end 

    replica 
    end 
end 

沿着這些線條的東西。

+1

不應該是replica.comments << comment.dup? – Toni

+1

@經驗正確,如果你想要複製一切。在我的情況下,我克隆了用戶並將相關數據移動到新用戶。不是100%確定OP想要什麼,但是我按照您的建議進行了編輯,因此對於該主題看起來更合適。 –