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

Calculated values from data returned by Ransack are removed when paginating with Kaminari

在我的 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"=>"✓"}   

事实证明这很容易修复,只需要 运行 在@q.result

上进行计算
<%= number_to_percentage(@q.result.average(:status), precision: 0) %>