Rails 3 Active Record对象重新初始化

时间:2012-10-19 20:42:53

标签: ruby ruby-on-rails-3 activerecord

我有一个旧的用户对象和一个新的用户对象。 我正在尝试创建一个新的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。

3 个答案:

答案 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