我有一个旧的用户对象和一个新的用户对象。 我正在尝试创建一个新的User对象,并希望将所有属性分配给旧用户对象,并保持id(主键)相同而不在User表中创建新行。
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 :(得分: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")
答案 1 :(得分:0)
你的问题很容易回答,但就像Zach Kemp上面所说的那样,你应该描述你的用例,所以也许someoene可以建议一个更好的方法来做你想做的事。
无论如何,这将做你想要的。
old_user = User.find(20)
new_user = User.new(old_user.attributes)
new_user.save!
答案 2 :(得分:0)
如果这是你想要的,ruby中的clone方法可以解决问题。它还将克隆id
new_user = old_user.clone