2014-01-28 41 views
0

我有jobplans有很多jobtasks。這些就像模板。我想從他們創建workorderstasksRails獲得控制器中創建的新記錄的ID

這是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爲零。我需要每個新的task來參考workorder。如何訪問新創建的workorder的ID?

感謝您的幫助!

回答

4

這樣做:

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 
+0

感謝您的回答! – Reddirt

1

你永遠實例@workorder(你並不真的需要一個實例變量)。只要改變:

Workorder.create(wo_attrs) 

workorder = Workorder.create(wo_attrs) 

,並進一步對

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

GL HF &

+0

哇,你擊敗了我@Agis。 – rlecaro2

相關問題