web-dev-qa-db-ja.com

Rails

属性id, name, locationのモデルFooがあります。 Fooのインスタンスがあります:

f1 = Foo.new
f1.name = "Bar"
f1.location = "Foo York"
f1.save

f1をコピーし、そのコピーからFooモデルの別のインスタンスを作成したいのですが、f1.idf2.idに引き継がないでください(I明示的に割り当てたくないので、必要に応じてdbで処理します)。

各属性を手動でコピーする以外に、これを行う簡単な方法はありますか?組み込み関数はありますか、それとも作成するのが最善の方法でしょうか?

ありがとう

40
user94154

これが ActiveRecord :: Base#clone メソッドの目的です。

@bar = @foo.clone

@bar.save
61
Vitaly Kushner

次の質問に従って、Rails> = 3.1を使用している場合は、object.dup

activerecordレコードを複製する最も簡単な方法は何ですか?

74
mydoghasworms

a wrongこれを行う方法は次のとおりです。

f2 = Foo.new( f1.attributes )     # wrong!
f2.save                           # wrong!

または1行ですが、まだwrong

f2 = Foo.create( f1.attributes )  # wrong!

詳細についてはコメントを参照してください

2
bjelli

あなたはRailsのように重複したレコードを作ることができます

@bar = @foo.dup
@bar.save!
1
Foram Thakral