1. ホーム
  2. ruby-on-rails

[解決済み】activerecordのレコードを複製する最も簡単な方法は何ですか?

2022-03-24 07:19:30

質問

ActiveRecordオブジェクトのコピーを作成し、その過程で1つのフィールドを変更したいのですが(さらに id ). これを達成するための最も簡単な方法は何ですか?

新しいレコードを作成し、フィールドごとにデータをコピーする反復処理を行うこともできますが、もっと簡単な方法があるはずです。

おそらくこのようなものでしょう。

 new_record = Record.copy(:id)

解決方法は?

コピーを取得するには、dup (< rails 3.1+ではclone) メソッドを使用します。

#rails >= 3.1
new_record = old_record.dup

# rails < 3.1
new_record = old_record.clone

そして、好きなフィールドを変更することができます。

ActiveRecordは組み込みのObject#cloneをオーバーライドします。 を使用して、未割り当てのIDを持つ新しい(DBに保存されていない)レコードを提供します。

ただし、関連付けはコピーされないので、必要であれば手動で行う必要があります。

Rails 3.1 cloneは浅いコピーなので、代わりにdupを使用してください...