0

我有一个旧用户对象和一个新用户对象。我正在尝试创建一个新的用户对象,并希望将所有属性分配给旧用户对象并保持 id(主键)相同,而不在用户表中创建新行。

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。

4

3 回答 3

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: "new_email@email.com")
于 2012-10-19T20:56:44.333 回答
0

如果这是你想要的,ruby 中的 clone 方法可以解决问题。它还将克隆 id

new_user = old_user.clone
于 2012-10-20T11:28:42.403 回答
0

您的问题很容易回答,但就像 Zach Kemp 上面所说的那样,您应该描述您的用例,这样也许有人可以建议一种更好的方法来做您想做的事情。

无论如何,这会做你想要的。

old_user = User.find(20)
new_user = User.new(old_user.attributes)
new_user.save!
于 2012-10-19T21:35:15.120 回答