Edited at

Railsで関連モデルも一緒にcloneして新しいレコードを作成する

More than 3 years have passed since last update.

Railsで更新じゃなくて、同じものをコピーして新規作成したい際に関連モデルとかで悩んだのでメモします。

今回は


  • 編集のときにそのオブジェクトを更新するのではなく新たに作成したい。

  • ただフォームで送られてきたのは更新して。

  • そもそもこのフォームでは送られてこない関連モデルもある。

  • その関連モデルも新たに作成したい。

という状況でした。

そんな時に役立ったGemが、deep_cloneableです。だいたいこれ見ればわかるかなと思います。

参考までに

@old_event = Event.find(params[:id])

@event = @old_book.deep_clone(include: [:event_scheduls], except: [{ event_scheduls: [:id] }])
@event.attributes = event_params #strong parameter
@event.save

paramsで送られてくる関連イベントも新たに作成する場合にはidを送ろうとしてくるhiddenをjavascriptとかで消しちゃうか、strong parameterにidなければ問題ないしって感じでしょうか。

他に何かいいやり方がある気もしますが^^;

とりあえずとても助かったGemでした。