2012-10-19 30 views
0

我有一箇舊的用戶對象和一個新的用戶對象。 我試圖創建一個新的用戶對象,並希望將所有屬性分配給舊的用戶對象,並保持id(主鍵)相同,而無需在用戶表中創建新行。Rails 3 Active Record對象重新初始化

old_user = User.find(20) 
old_user.id # this is 20 
old_user.name # this displays "old_name" 
new_user = User.new 
new_user.name = "new_name" 
old_user = new_user 
old_user.save # this doesn't work since the new_user.id is nil and so is old_user.id is nil 
old_user.id = 20 and save #this won't work either. 

如何將new_user的狀態保存到old_user對象,但保持相同的主鍵ID。

+0

爲什麼你需要創建一個新的用戶?你不能只更新old_user的屬性嗎? –

+0

因爲new_user具有很多屬性和關聯,所以將new_user的狀態保存爲old_user而不是更新old_user – sidj

+0

有一個答案幫助了我,但它被刪除或刪除了,它是由V的東西 – sidj

回答

0

據我所知你的問題,你不需要一個新的用戶對象。有幾種方法來更新一個ActiveRecord對象的屬性:

user = User.find(20) 
user.name = "new_name" 
user.save # returns true if successful 

您可以在哈希通過一次更新幾個屬性:

user = User.find(20) 
user.update_attributes(name: "new_name", email: "[email protected]") 
+0

謝謝,我知道我可以做user.name =「new_name」,但是可以將new_user傳遞給update_attributes嗎?像user.update_attributes(new_user.attributes) – sidj

+0

也許你應該告訴我們一些關於你的用例。你爲什麼要創建一個新用戶? –

0

你的問題很容易回答,但像扎克坎普上面說,你應該描述你的用例,所以也許someoene可以建議一個更好的方式來做你想做的事情。

無論如何,這將做你想做的。

old_user = User.find(20) 
new_user = User.new(old_user.attributes) 
new_user.save! 
0

如果這就是你想要的,那麼ruby中的克隆方法就可以做到這一點。它也將克隆ID

new_user = old_user.clone