我有两个模型Product
和Price
。 Product
可以有多个价格,每个价格都有不同的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个可以访问最新价格的产品?
答案 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])