当使用Kaminari进行分页时,将删除Ransack返回的数据的计算值

时间:2015-05-21 23:17:04

标签: ruby-on-rails pagination kaminari ransack

在我的Rails应用程序中,我正在对Ransack返回的数据执行计算。这些是:

  • 总计数
  • 某些字段的平均值

平均值有效但我一进入下一页(使用Kaminari分页),值就会消失。但是,总计数仍在继续。

从视图来看,这有效:

<%= @products.total_count %>

同样从视图来看,这是有效的,但是当进入下一页时,它不会:

<%= number_to_percentage(@products.average(:status), precision: 0) %>

有没有人有任何想法?

产品控制器:

def index
    @q = Product.ransack(params[:q])
    @q.sorts = 'start_date desc' if @q.sorts.empty?
    @products = @q.result.page(params[:page]).per(30)
end

这是在第一页上工作时的SQL查询:

(23.7ms)  SELECT  AVG("products"."price_eur") AS avg_id FROM "products"  WHERE (status > 100) AND "products"."above_revenue_average" = 't' AND ("products"."name" ILIKE '%a%') LIMIT 30 OFFSET 0

并且参数:

Parameters: {"utf8"=>"✓", "q"=>{"name_cont"=>"a", "type_eq"=>"", "upward_trending"=>"1", "downward_trending"=>"", "category_id_in"=>[""], "country_eq"=>"", "price_eur_gteq"=>"", "price_eur_lteq"=>"", "start_date_gteq"=>"", "start_date_lteq"=>""}, "commit"=>"All"}   

这是从第二页停止工作时的SQL查询:

(23.8ms)  SELECT  AVG("products"."price_eur") AS avg_id FROM "products"  WHERE (status > 100) AND "products"."above_revenue_average" = 't' AND ("products"."name" ILIKE '%a%')

并且参数:

Parameters: {"commit"=>"All", "page"=>"2", "q"=>{"category_id_in"=>[""], "country_eq"=>"", "downward_trending"=>"", "name_cont"=>"a", "price_eur_gteq"=>"", "price_eur_lteq"=>"", "start_date_gteq"=>"", "start_date_lteq"=>"", "type_eq"=>"", "upward_trending"=>"1"}, "utf8"=>"✓"}   

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的修复,只需要在@ q.result上运行计算

<%= number_to_percentage(@q.result.average(:status), precision: 0) %>