2

以下是相关代码:

def index
    @customer = Customer.new
    if(session[:admin_id])
      @allJobs = Job.where(:merchant_id => session[:admin_id].to_s).paginate(:per_page => 15, :page => params[:page])
    else
      @allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 15, :page => params[:page])
    end
    respond_to do |format|      
      #@allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      format.html
      #format.csv {send_data to_csv(@all_customers)}
      format.csv { render :csv => @allJobs }

当我单击导出时 - 我得到一个 @allJobs 的 csv... 仅显示 15 个项目。

如您所见,在格式块中,我尝试将@allJobs 重新定义为仅具有merchant_id 的所有内容,但这会引发错误:

No comma format for class Plucky::Query defined for style {}

我尝试将 var 名称更改为其他名称 - 同样的错误。我只想导出所有与merchant_id 语句匹配的工作。

4

4 回答 4

2

如果有人在谷歌搜索以下逗号错误后登陆这里:

  • No comma format for class String defined for style {}
  • No comma format for class TrueClass defined for style {}

然后检查以确保您没有滥用该.to_comma方法。您不需要在 Rails 控制器中调用此方法。

不正确

respond_to do |format|
  format.html
  format.csv { render :csv => @things.to_comma}
end

正确

respond_to do |format|
  format.html
  format.csv { render :csv => @things}
end
于 2013-11-02T22:30:05.653 回答
2

解决分页对特定请求类型的限制的一种方法,例如用于导出的 CSV,使用控制器在调用 paginate 之前检查请求对象。例如:

def index
    @customer = Customer.new
    if(session[:admin_id])
      @allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      unless  request.format == "csv"
        @allJobs= @allJobs.paginate(:per_page => 15, :page => params[:page])
      end
    else
      if  request.format == "csv"
        @allJobs = Job.all(:order => :_id.desc)
      else
         @allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 15, :page => params[:page])

      end
    end
    respond_to do |format|      
      #@allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      format.html
      #format.csv {send_data to_csv(@all_customers)}
      format.csv { render :csv => @allJobs }

请注意,在 :admin_id 情况下,我们可以链接分页方法,而在非 admin_id 情况下,.all 方法返回一个我们不能调用分页的数组。

于 2014-02-25T19:28:22.953 回答
1

我不知道为什么会这样,但是:

format.csv { render :csv => @allJobs.paginate }

只需添加 .paginate 而不调用任何选项即可导出所有作业,而不管每页显示 15 个作业。

完整更新的代码:

def index
    @customer = Customer.new
    if(session[:admin_id])
      @allJobs = Job.where(:merchant_id => session[:admin_id]
    else
      @allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 50, :page => params[:page])
    end
    respond_to do |format|      
      #@allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      format.html do
        @allJobs = @allJobs.paginate(:per_page => 15, :page => params[:page])
      end
      format.csv { render :csv => @allJobs.paginate }
于 2013-06-08T07:21:25.087 回答
0

我尝试了您的解决方案,但无法正常工作。最后,我确信这不是最佳的,我生成了另一个没有分页的实例变量,并将其调用用于导出。下面的示例代码

...    
@allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 50, :page => params[:page])
@allJobs_xls = Job.all(:order => :_id.desc)
于 2013-09-02T07:49:52.887 回答