2012-01-27 6 views
4

私のオブジェクトの1つを今日複製しようとしましたが、ドキュメントのように機能しないようです。私のコンソールでRails 3.2のクローンメソッドでの問題

私がやっている:

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

をだから、古いもののように同じIDを持っているので、クローン化されたオブジェクトは、単に重複しているように見えますが、マニュアルに従って、それは新しいオブジェクトでなければなりません?まだIDが割り当てられておらず、新たなリソースとして扱われるリソースのクローンを返し

クローン()

ライアン= Person.find(1)

not_ryan = ryan.clone

not_ryan.new? #=> true

+0

コンソールとnew_recordで全く同じシーケンスを試しましたか?真を返しました。 – klochner

+0

レールから取り外されたようです> 3.0.9 – Johny

答えて

14

the docsによると、Rails 2.3.8以降は廃止されている可能性があります。実際にはObject#cloneと呼んでいましたが、それは012.を呼び出していましたが、これはRails 3.0.9で削除されました。

代わりにdupを使用してください。

1

これはアップグレード担当者にとっては醜いものです: 'clone'を呼び出すとエラーが出ることはありません。元のモデルを返すだけです。だからあなたが書いたコードは、いくつかのモデルを複製して新しいコピーを修正することになっていますが、代わりにオリジナルを静かに修正します!