2017-04-07 41 views
0

一个基本的函数,我只是无法得到我的头。在Ruby中复制SQL行

我需要将一个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