2017-04-07 4 views
0

私は頭を上げられない基本的な機能です。RubyでSQLの行を複製する

1つのMySQL行から新しい行に値をコピーする必要があります。

key_tasksをクローンされたfuture_tasksに設定しましたが、タスクごとに新しい行を作成すると予想される結果ではなく、同じIDが保持され、新しい行が作成されません。 @performance_reviewは、現在行われているレビューに関連し、評価[-2]は最後に完了したレビューに関連しています。

@performance_review.key_tasks = appraisals[-2].performance_review.future_tasks.clone 
    @performance_review.save 

例行:クローン後予想

539 | test1 | 1 | 130 | 2017-04-07 10:27:42 | 2017-04-07 11:02:10 

クローン後の実際
539 | test1 | 1 | 130 | 2017-04-07 10:27:42 | 2017-04-07 11:02:10 
540 | test1 | 1 | 131 | 2017-04-07 10:27:42 | 2017-04-07 11:02:10 

539 | test1 | 1 | 131 | 2017-04-07 10:27:42 | 2017-04-07 11:02:10 
+0

の可能性のある重複した[ActiveRecordのレコードを複製するための最も簡単な方法は何ですか?](http://stackoverflow.com/questions/60033/what-is-the-easiest-way-to-duplicate-an -activerecord-record) – Chowlett

+0

IDは変更されませんが、私の質問から予想される結果です。 –

+0

ハングオン、 'key_tasks'と' future_tasks'は両方とも ':has_many'関係ですか? – Chowlett

答えて

1

は解決策を見つけました。 'dup'はコレクションでは動作しないようです。

appraisals[-2].performance_review.future_tasks.each do |t| 
    t['future'] = 0 
    @performance_review.key_tasks << t.dup 
    end 
0

Railsには、ハッシュの方法があります(exclude)。

あなたがIDを除くすべてのクローンを作成したいのであれば、あなたが使用することができ、

Foo.find(3).attributes.except("id") 

例えば

Place.first.attributes.except("id")  
#=> {"name"=>"Seyidin dönəri", "address"=>"Lorem ipsum", "photo"=>"http://press24.az/az/uploads/posts/2013-07/1375267965_1362063196_btn-rk-et-dnr.jpg", "phone"=>"+994502113213", "lat"=>"40.78563", "lng"=>"41.98745", "created_at"=>2017-04-04 07:36:21 UTC, "updated_at"=>2017-04-04 07:36:21 UTC} 

次に、モデルのcreateメソッドにこのハッシュを渡すことができます。

Place.create hash_above