ActiveRecordの複製(as new_record)にはdupを使う
ActiveRecordのdup
とclone
メソッドの役割が逆になっていて、
ちょっとハマった。
dup
の特徴 (as new_record)id
がnil
new_record? == true
- 複製元オブジェクトの値を変更しても感知しない
clone
の特徴 (not as new_record)id
が複製元オブジェクトと同じnew_record? == false
- 複製元オブジェクトの値を変更すると値が変わる
そういえばネトゲでdupeが問題になることがあったけど、
同じアイテム(同じ属性値を持ったアイテム)が別のレコードとして登録されちゃうわけだから、
本来dup
の使い方はこっちが正しいのだね。
Reference
Ruby on Rails: Up and Running: Up and Running
- 作者: Bruce A. Tate,Curt Hibbs
- 出版社/メーカー: O'Reilly Media
- 発売日: 2008/12/17
- メディア: Kindle版
- この商品を含むブログを見る