Paginate使用逗号宝石限制我的csv导出 - 如何解决?

时间:2013-06-07 21:28:47

标签: ruby-on-rails mongodb csv render

以下是相关代码:

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 个答案:

答案 0 :(得分: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情况,我们可以链接pagnation方法,而在非admin_id情况下.all方法返回一个我们无法调用paginate的数组。

答案 1 :(得分: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 }

答案 2 :(得分:1)

如果有人在谷歌搜索这样的逗号错误后落在这里:

  • 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

答案 3 :(得分:0)

我尝试了你的解决方案而无法让它发挥作用。最后,我确信这不是最优的,我生成了另一个没有分页的实例变量,并为导出调用了它。下面的示例代码

...    
@allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 50, :page => params[:page])
@allJobs_xls = Job.all(:order => :_id.desc)