ActiveRecordの複製(as new_record)にはdupを使う

ActiveRecorddupcloneメソッドの役割が逆になっていて、 ちょっとハマった。

  • dupの特徴 (as new_record)

    • idnil
    • new_record? == true
    • 複製元オブジェクトの値を変更しても感知しない
  • cloneの特徴 (not as new_record)

    • idが複製元オブジェクトと同じ
    • new_record? == false
    • 複製元オブジェクトの値を変更すると値が変わる

そういえばネトゲでdupeが問題になることがあったけど、 同じアイテム(同じ属性値を持ったアイテム)が別のレコードとして登録されちゃうわけだから、 本来dupの使い方はこっちが正しいのだね。

Reference

Ruby on Rails: Up and Running: Up and Running

Ruby on Rails: Up and Running: Up and Running