我今天尝试克隆了我的一个对象,但似乎它在文档中不起作用。
在我的控制台中我正在做:
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;真
答案 0 :(得分:14)
根据the docs,自Rails 2.3.8以来已被弃用,并且可能已被删除。所以实际上你正在调用曾经调用Object#clone的ActiveRecord::Base#initialize_copy,它在Rails 3.0.9中删除了。
改为使用dup。
答案 1 :(得分:1)
对于升级者来说,这是一个丑陋的问题:打电话给克隆&#39;不会抛出错误或任何东西 - 它只会返回原始模型。因此,您编写的任何代码都应该复制某些模型并对新副本进行修改,而是默默地修改原始版本!