2014-01-28 57 views
0

我在'JobplansController . It creates工作訂單and任務based on templates called工作計劃and jobtask`中具有以下代碼。Rails從另一個控制器運行代碼

def copy_to_workorder 
    @jobplan = Jobplan.find(params[:id]) # find original jobplan 
    wo_attrs = @jobplan.attributes 
    wo_attrs.merge!({jobplan_id: @jobplan.id }) 
    wo_attrs.delete('woschedule_id') 
    workorder = 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 

運行良好使用此按鈕:

<%= link_to 'Create Workorder', copy_to_workorder_jobplans_path(:id => @jobplan.id), :class => 'btn btn-success' %> 

Jobplanswoschedule一個MANY_TO_MANY關係。 woschedule正用於安排基於jobplans創建workorders

我試圖向woschedule控制器添加代碼。這就是我想:

def run_jobplans 
    @woschedule = Woschedule.find(params[:id]) 
    @woschedule.jobplans.each do |jobplan| 
     copy_to_workorder_jobplans_path(jobplan) 
    end 

    redirect_to @woschedule, notice: 'Jobplans were run successfully.' 
    end 

我使用運行run_jobplans按鈕是這樣的:

<%= link_to 'Run Jobplans', run_jobplans_woschedules_path(:id => @woschedule.id), :class => 'btn btn-success' %> 

它執行的代碼,但沒有新workorders獲得創建。

感謝您的幫助!

更新!執行時

但是,我怎麼打發:id - :

我搬到了代碼的應用程序控制器在那裏我從一個jobplan創建

def jobplan_to_workorder 
@jobplan = Jobplan.find(params[:id]) # find original jobplan 
wo_attrs = @jobplan.attributes 
wo_attrs.merge!({jobplan_id: @jobplan.id }) 
wo_attrs.delete('woschedule_id') 
workorder = 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 
end 

這個作品在jobplan控制器從woschedule控制器? woschedule has_many :jobplans

def run_jobplans 
    @woschedule = Woschedule.find(params[:id]) 
    @woschedule.jobplans.each do |jobplan| 
    jobplan_to_workorder(:id => jobplan.id) 
    end 
    redirect_to @woschedule, notice: 'Jobplans were run successfully.' 
    end 

回答

0

您應該將您的主要方法複製到application_controller並刪除一些不常見的代碼。

application_controller.rb

def copy_to_workorder_jobplans(parameter) 
    ... 
end 

x_controller.rb

def a 
    ... 
    copy_to_workorder_jobplans(parameter) 
    redirect_to a_path 
end 

y_controller.rb

def b 
    ... 
    copy_to_workorder_jobplans(parameter) 
    redirect_to b_path 
end 
+0

我如何通過對jobplan參數?請參閱更新的問題。 – Reddirt

+0

我得到了它的工作 - 再次感謝。 – Reddirt

0

你應該將你在這兩個控制器方法給助手引用的邏輯和獨立調用它。

相關問題