アクティブレコードのレコードを複製する最も簡単な方法は何ですか? 質問する

アクティブレコードのレコードを複製する最も簡単な方法は何ですか? 質問する

ActiveRecord オブジェクトのコピーを作成し、そのプロセスでidに加えて 1 つのフィールドを変更したいと考えています。これを実現する最も簡単な方法は何ですか?

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

おそらく次のようになります:

 new_record = Record.copy(:id)

ベストアンサー1

コピーを入手するには、重複(または < 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 のクローン は浅いコピーなので、代わりに dup を使用してください...

おすすめ記事