Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails获取在控制器中创建的新记录的id_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails获取在控制器中创建的新记录的id

Ruby on rails Rails获取在控制器中创建的新记录的id,ruby-on-rails,Ruby On Rails,我有工作计划,有很多工作任务。这些类似于模板。我想从中创建工作顺序和任务 这是jobplans控制器中的代码: def copy_to_workorder @jobplan = Jobplan.find(params[:id]) # find original jobplan wo_attrs = @jobplan.attributes wo_attrs.delete('woschedule_id') Workorder.create(wo_attrs) @jobplan

我有工作计划,有很多工作任务。这些类似于模板。我想从中创建工作顺序和任务

这是jobplans控制器中的代码:

def copy_to_workorder
  @jobplan = Jobplan.find(params[:id]) # find original jobplan
  wo_attrs =  @jobplan.attributes
  wo_attrs.delete('woschedule_id')
  Workorder.create(wo_attrs)

  @jobplan.jobtasks.each do |jobtask|
    jobtask_attrs = jobtask.attributes
    jobtask_attrs.delete('jobplan_id')
    jobtask_attrs.merge!({ workorder_id: @workorder.id })
    Task.create(jobtask_attrs)
  end

  redirect_to @jobplan, notice: 'Project was successfully created.'
end
我的问题是@workorder为零。我需要每项新任务都参考工作顺序。如何访问新创建的工单的id

谢谢你的帮助

这样做:

def copy_to_workorder
  @jobplan = Jobplan.find(params[:id]) # find original jobplan
  wo_attrs =  @jobplan.attributes
  wo_attrs.delete('woschedule_id')
  workorder = Workorder.create(wo_attrs)
  # ^^^^^ saving the newly created record in a local variable
  #       so we can refer to it later

  @jobplan.jobtasks.each do |jobtask|
    jobtask_attrs = jobtask.attributes
    jobtask_attrs.delete('jobplan_id')
    jobtask_attrs.merge!(workorder_id: workorder.id)
    #                                  ^^^^^^ now fetch its id
    Task.create(jobtask_attrs)
  end

  redirect_to @jobplan, notice: 'Project was successfully created.'
end
这样做:

def copy_to_workorder
  @jobplan = Jobplan.find(params[:id]) # find original jobplan
  wo_attrs =  @jobplan.attributes
  wo_attrs.delete('woschedule_id')
  workorder = Workorder.create(wo_attrs)
  # ^^^^^ saving the newly created record in a local variable
  #       so we can refer to it later

  @jobplan.jobtasks.each do |jobtask|
    jobtask_attrs = jobtask.attributes
    jobtask_attrs.delete('jobplan_id')
    jobtask_attrs.merge!(workorder_id: workorder.id)
    #                                  ^^^^^^ now fetch its id
    Task.create(jobtask_attrs)
  end

  redirect_to @jobplan, notice: 'Project was successfully created.'
end

您从未实例化@workorder,也不需要实例变量。只要改变一下:

 Workorder.create(wo_attrs)

然后

jobtask_attrs.merge!({ workorder_id: workorder.id })

GL&HF

您永远不会实例化@workorder,也不需要实例变量。只要改变一下:

 Workorder.create(wo_attrs)

然后

jobtask_attrs.merge!({ workorder_id: workorder.id })

GL&HF

哇,你赢了我@Agis.哇,你赢了我@Agis.谢谢你的回答!谢谢你的回答!