У меня есть следующий код в 'JobplansController . It creates
workorder and
Задачи based on templates called
jobplan 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' %>
Jobplans
имеют many_to_many отношения с 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
Как передать параметр для jobplan? См. Обновленный вопрос. – Reddirt
Я получил его работу - еще раз спасибо. – Reddirt