以下是相关代码:
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语句匹配的所有作业。
答案 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)