最近的价格和will_paginate

时间:2017-09-11 17:40:56

标签: ruby-on-rails postgresql ruby-on-rails-5 will-paginate

我有两个模型ProductPriceProduct可以有多个价格,每个价格都有不同的created_at,因此我可以随时获得产品的价格历史记录。

我希望在每个产品旁边显示最近价格的产品列表,并使用will_paginate为每页分页10个产品。

我在ProductsController

中写了这样的内容
@products = Product.includes(:prices).references(:prices).
  select('DISTINCT ON (products.id) *').
  order('products.id, prices.created_at ASC').
  paginate(page: params[:page])

当我检查.to_sql这个查询时,我发现will_paginate会添加WHERE \"products\".\"id\" IN (2, 2, 3, 3, 4, 4, 5, 5, 7, 7),而不是10个产品我得到5.

当我尝试:

Product.includes(:prices).references(:prices).
      select('DISTINCT ON (products.id) *').
      order('products.id, prices.created_at ASC').limit(10).pluck(:id)

我得到=> [2, 2, 3, 3, 4, 4, 5, 5, 7, 7]

任何想法如何更改它以获得10个可以访问最新价格的产品?

1 个答案:

答案 0 :(得分:0)

我想我设法做到了这一点:

@products = Product.
  select('DISTINCT ON(products.id) products.*, prices.value as recent_price').
  joins('LEFT OUTER JOIN prices ON products.id = prices.product_id').
  order('products.id ASC, prices.created_at DESC').
  paginate(page: params[:page])