当使用 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) %>
在我的 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) %>