我在'JobplansController . It creates
工作单and
任务based on templates called
jobplan and
jobtask`中有以下代码。
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' %>
Jobplans
与woschedule
有很多关系。 woschedule
用于根据workorders
安排jobplans
的创建。
我正在尝试将代码添加到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
。
感谢您的帮助!
更新!
我将代码移动到了应用程序控制器:
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
控制器 - 我从一个jobplan
创建的地方:
但是,如何从:id
控制器执行时传递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 :(得分:0)
您应该将您在两个控制器方法中引用的逻辑移动到帮助程序并单独调用它。
答案 1 :(得分:0)
您应该将main方法复制到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