Я использую Rails 4.2 с PostgreSQL. У меня есть модель Product
и модель Purchase
с Product
has many
Purchases
. Я хочу найти отдельные недавно купленные товары. Сначала я пробовал:
Product.joins(:purchases)
.select("DISTINCT products.*, purchases.updated_at") #postgresql requires order column in select
.order("purchases.updated_at DESC")
Однако это приводит к дублированию, поскольку он пытается найти все кортежи, где пара (product.id
и purchases.updated_at
) имеет уникальное значение. Однако я просто хочу выбрать продукты с разными id
после соединения. Если идентификатор продукта появляется в соединении несколько раз, выберите только первый. Итак, я также пробовал:
Product.joins(:purchases)
.select("DISTINCT ON (product.id) purchases.updated_at, products.*")
.order("product.id, purchases.updated_at") #postgres requires that DISTINCT ON must match the leftmost order by clause
Это не работает, потому что мне нужно указать product.id
в предложении order
из-за ограничение, которое выводит неожиданный порядок.
Каков путь рельсов для достижения этого?