Problem with nested routes

1

I have the following nested path:

resources :companies do
  resources :weeks do
    resources :payrolls 
  end
end

My problem arises when I realize a new_company_week since it ignores my answer.

In the controller I have the following:

def new
  @week = Week.new
end

def create
  @week = Week.where('status_id = 1 and company_id = ?',params[:company_id]).update_all(status_id:4)
  @week = Week.new(week_params)

  respond_to do |format|
    if @week.save

      if(params[:company_id] == 4)
        @employees = EmployeeCw.all.where(status_id: 1)

        @employees.find_each do |employee|
          @payroll = Payroll.new({:employee_id=>employee.Employee.id, :week_id=>@week.id, :department_id=>employee.department_id,
          :dias_trabajados=>0,:dias_vacaciones=>0,:faltas=>0,:total_percepciones=>0,:total_retenciones=>0,
          :total_sueldo_bruto=>0,:total_sueldo_neto=>0,:sueldo_fiscal=>0,:pago_impuesto=>0,
          :pago_eps=>0,:tipo_pago_fiscal=>employee.tipo_pago_fiscal,:tipo_pago_eps=>employee.tipo_pago_eps,
          :created_by=> current_user,:updated_by=>current_user, :employee_cw=> employee.id})
          @payroll.save

          @employee_wd = EmployeeWd.new({:created_at=>current_user,:created_by=>current_user, :payroll_id=>@payroll.id,
          :construction_work=>employee.construction_work_id,:jueves=>0,:viernes=>0,:sabado=>0,:domingo=>0,
            :lunes=>0,:martes=>0,:miercoles=>0})
          @employee_wd.save

          flash[:notice] = "Week successfully created CHS"
          format.html { redirect_to company_weeks_path(params[:company_id])}
        end
      else
        @employees = Employee.all.where(status_id: 1)

        @employees.find_each do |employee|
          @payroll = Payroll.new({:employee_id=>employee.id, :week_id=>@week.id, :department_id=>employee.department_id,
          :dias_trabajados=>0,:dias_vacaciones=>0,:faltas=>0,:total_percepciones=>0,:total_retenciones=>0,
          :total_sueldo_bruto=>0,:total_sueldo_neto=>0,:sueldo_fiscal=>0,:pago_impuesto=>0,
          :pago_eps=>0,:tipo_pago_fiscal=>employee.tipo_pago_fiscal,:tipo_pago_eps=>employee.tipo_pago_eps,
          :created_by=>current_user,:updated_by=>current_user})
          @payroll.save

          @employee_wd = EmployeeWd.new({:created_at=>'Daniel',:created_by=>'daniel', :payroll_id=>@payroll.id,
          :jueves=>0,:viernes=>0,:sabado=>0,:domingo=>0,:lunes=>0,:martes=>0,:miercoles=>0})
          @employee_wd.save

          flash[:notice] = "Week successfully created"
          format.html { redirect_to company_weeks_path(params[:company_id])}
        end
      end
    else
      format.html { render :new }
      format.json { render json: @week.errors, status: :unprocessable_entity}
    end
  end
end

I really do not know if it is the best way to store information, however I have the following line:

format.html { redirect_to company_weeks_path(params[:company_id]) }

Which ignores me completely and when it does the post it sends me to /weeks .

In my routes I have the following:

    company_weeks GET    /companies/:company_id/weeks(.:format)            weeks#index
                  POST   /companies/:company_id/weeks(.:format)            weeks#create
 new_company_week GET    /companies/:company_id/weeks/new(.:format)        weeks#new
edit_company_week GET    /companies/:company_id/weeks/:id/edit(.:format)   weeks#edit
     company_week GET    /companies/:company_id/weeks/:id(.:format)        weeks#show
                  PATCH  /companies/:company_id/weeks/:id(.:format)        weeks#update
                  PUT    /companies/:company_id/weeks/:id(.:format)        weeks#update
                  DELETE /companies/:company_id/weeks/:id(.:format)        weeks#destroy

I add an image with the error that shows me:

My week_params method is this:

def week_params
  params.require(:week).permit(:fecha_inicial, :fecha_final, :fecha_pago, :tipo_nomina, :created_by, :updated_by, :company_id)
end

And the errors using the params are the following:

    
asked by Daniel Romero 16.05.2017 в 21:15
source

1 answer

0

It does not redirect you because it first generates an error (the one you see on your screen) and, therefore, you stay in /weeks .

The error is because params[:company_id] does not bring any value because the parameter you send it within group week , then params[:company_id] equals nil and hence the message:

No route matches {:action=>"index", :company_id=>nil, :controller=>"weeks"}

To fix it change params[:company_id] by params[:week][:company_id] 1 :

format.html { redirect_to company_weeks_path(params[:week][:company_id]) }

1 You could also use week_params[:company_id]

    
answered by 16.05.2017 / 23:56
source