2014-01-28 3 views
0

У меня есть следующий код в '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 

ответ

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

Вы должны переместить логику вы ссылающийся в обоих методах контроллера в качестве помощника и вызвать его самостоятельно.

Смежные вопросы