2011-06-14

Railsのモデルをcloneしたときにcreated_atとかはコピーされたくない

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Railsのモデルのインスタンスをコピーして、ちょっとだけ内容を変更して別レコードとして保存したいときに
clone
でモデルをコピーして必要部分だけを変更しているのですが、
モデルに
created_at,updated_atがあるときは、この値もそのままコピーされてしまいます。

created_at,updated_atはコピーして別レコードとして保存した日時になって欲しいなぁとか思ったわけです。

なので以下のような感じにしてみました。
a = Foo.find(:first)
=> #<Foo id: 1, article: "aaa", created_at: "2011-06-10 17:02:21",updated_at: "2011-06-10 17:02:21">
b = a.clone
=> #<Foo id: nil, article: "aaa", created_at: "2011-06-10 17:02:21",updated_at: "2011-06-10 17:02:21">
b.created_at = nil
=> nil
b.updated_at = nil
=> nil
b.save!
=> true
p b
#<Foo id: 2, article: "aaa", created_at: "2011-06-13 14:27:23", updated_at: "2011-06-13 14:27:23">

created_at,updated_atをnilにしてからsaveしただけです。
他にも方法があるような気がしますが、まぁよしです。
コメントを投稿