使用格式xls时,Rails堆栈太深

时间:2015-04-07 16:50:42

标签: ruby-on-rails ruby ruby-on-rails-4

这是我的控制器方法:

def report1
    inicio=Date.strptime(params[:start], "%d/%m/%Y") - 1.days rescue ""
    fin=Date.strptime(params[:finish], "%d/%m/%Y") - 1.days rescue ""
    @inicio=inicio
    @start=params[:start]
    @finish=params[:finish]
    @topgardenid=params[:topgarden_id]
    @projectid=params[:project_id]
    params_error=false
    if (inicio.blank?)
        flash.now[:notice] = 'Fecha inicíal no correcta o no selecionada!'
        params_error=true
    end
    if (fin.blank?)
      flash.now[:notice] = 'Fecha final no correcta o no selecionada!'
      params_error=true
    end
    if (params[:topgarden_id].blank?)
      flash.now[:notice] = 'Selecionar un Jardin'
      params_error=true
    end
    if (params[:project_id].blank?)
      flash.now[:notice] = 'Selecionar un Proyecto'
      params_error=true
    end
    if (!params_error)
    #fin=Date.parse(params[:fin]).strftime("%Y-%m-%d") rescue ""
      @texts = []
      puts "INICIO [#{inicio}] FIN: [#{fin}] PROYECTO[#{params[:project_id]}] JARDÍN[#{params[:topgarden_id]}]"
      topgardens=Topgarden.find(params[:topgarden_id])
      topgardens.gardens.each do |g|
        sms=g.list_riego_dates(params[:start],params[:finish])
        if !sms.nil?
          sms.each do |s|
            @texts << s
          end

        end
      end
    end
    respond_to do |format|
      format.html { render 'index' }
      format.xls { headers["Content-Disposition"] = "attachment; filename=\"#{report1}\"" }
    end

  end

当我使用html格式调用页面时,当我使用此链接时,一切都很好:

 <%= link_to "Exportar Excel", report1_path( :project_id => @projectid, :topgarden_id => @topgardenid, :start => @start, :finish => @finish,   :format => "xls"), :class =>"vvbutton btn btn-success" %>

我遇到了这个导轨错误:

SystemStackError (stack level too deep):
  actionpack (4.1.7) lib/action_dispatch/middleware/reloader.rb:79

似乎该方法被称为无限次,但我无法理解为什么这种情况只是在xls被触发的情况下发生。

在其他控制器上,我以相同的方式使用xls格式,但没有遇到任何问题。

1 个答案:

答案 0 :(得分:2)

此行尝试将report1插入到字符串中。由于report1是您的方法的名称,因此它会在您收到SystemStackError之前调用它。

format.xls { headers["Content-Disposition"] = "attachment; filename=\"#{report1}\"" }