2014-05-14 36 views
0

我設計一個項目管理應用程序,我希望我的用戶能夠「叉」在數據庫中現有項目的項目。例如,@user1將創建一個項目,並@user2可能要修改的項目,所以@user2會點擊一個選項「叉」它。
發生這種情況時,除了他/她能夠修改它的內容之外,現有項目將幾乎與@user2重複。允許現有用戶「叉」的項目管理工具

我在想嵌套屬性可能會訣竅,但我不認爲這是正確的方法來解決這個問題。

有什麼建議嗎?

+0

你的意思是你想讓user2擁有一個單獨的獨立副本嗎? (然後,「fork」只是基於其他人的項目快速入門的一種方式。)或者您希望user2將此視爲她自己的項目,但所有用戶都會看到一個用戶的更改嗎? – awendt

回答

0

您應該使用ActiveRecord::Core#dup方法。
來自頁面:

Duped對象沒有標識,並被視爲新記錄。請注意,這是一個「淺」副本,因爲它僅複製對象的屬性,而不復制其關聯。 「深層」複製的範圍是特定於應用程序的,因此應由應用程序根據需要執行。 dup方法不保存時間戳(創建|更新)_(at | on)。

總之,@project.dup建立Project物體一樣,只是@project所有參數 - idcreated_atupdated_at領域。 @user2可以對這個新建對象做修改,然後save它。這模仿了fork功能。

相關問題