在Ruby中复制SQL行

时间:2017-04-07 11:16:05

标签: mysql ruby ruby-on-rails-3 activeadmin

我无法理解的基本功能。

我需要将值从一行MySQL行复制到新行 - 听起来很简单。

我尝试过以下操作,将key_tasks设置为等于克隆的future_tasks,但不是为每个任务创建新行的预期结果,而是保留相同的ID,因此不会创建新行。 @per_resent_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

2 个答案:

答案 0 :(得分:1)

找到解决方案。似乎'dup'对集合不起作用。

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

答案 1 :(得分:0)

Rails有一个exclude哈希方法。

因此,如果你想克隆除id之外的所有内容,你可以使用

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

e.g。

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方法。

e.g。

Place.create hash_above