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 に保存されていない) レコードを作成します。
関連付けはコピーされないため、必要な場合は手動で行う必要があることに注意してください。