在我的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"=>"✓"}
答案 0 :(得分:0)
这是一个非常简单的修复,只需要在@ q.result上运行计算
<%= number_to_percentage(@q.result.average(:status), precision: 0) %>