Rails 3.2中克隆方法的问题

时间:2012-01-27 20:12:00

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

我今天尝试克隆了我的一个对象,但似乎它在文档中不起作用。

在我的控制台中我正在做:

u = User.find 1
nu = u.clone
nu.new_record?
   => false 
nu.new?
  NoMethodError: undefined method `new?' for #<User:0x007fbf137b8278>

所以它看起来像克隆对象只是一个副本,因为它具有与旧的相同的Id,但根据文档,它应该是新对象?

  

clone()

     

返回尚未分配id的资源的克隆,并将其视为新资源。

     

ryan = Person.find(1)

     

not_ryan = ryan.clone

     

not_ryan.new? #=&gt;真

2 个答案:

答案 0 :(得分:14)

根据the docs,自Rails 2.3.8以来已被弃用,并且可能已被删除。所以实际上你正在调用曾经调用Object#cloneActiveRecord::Base#initialize_copy,它在Rails 3.0.9中删除了。

改为使用dup

答案 1 :(得分:1)

对于升级者来说,这是一个丑陋的问题:打电话给克隆&#39;不会抛出错误或任何东西 - 它只会返回原始模型。因此,您编写的任何代码都应该复制某些模型并对新副本进行修改,而是默默地修改原始版本!