Проблема с named_scope вызывает ошибку в will_paginate - как включить group_by в число? - PullRequest
2 голосов
/ 22 июля 2011

[рельсы 2.3.12] named_scope:

named_scope :order_by_price, lambda {{:joins => :variants, :group => "products.id", :order => "MAX(price)"}}

Консоль

1.
> Product.order_by_price.size
=> 21

2. 
> p = Product.order_by_price
> p.size
=> 4

sql запросов:

1.
SELECT count(*) AS count_all FROM `products` INNER JOIN `variants` ON variants.product_id = products.id

2.    
SELECT `products`.* FROM `products` INNER JOIN `variants` ON variants.product_id = products.id GROUP BY products.id ORDER BY MAX(price)

Я использую will_paginate для нумерации страниц. В этом случае значение total_entries равно 21, и количество страниц основано на этом, хотя есть только 4 продукта ...

Есть идеи, как мне заставить это работать правильно?

EDIT

Как правило, я должен включать group_by при вызове Product.count ... как?

1 Ответ

1 голос
/ 08 сентября 2011

Нет ответов, но я нашел решение.Может быть, это будет полезно и кому-то еще.Мне просто пришлось переопределить количество, выбрав отличный product_id:

  def self.count(*args)
    super(args, {:select => "(products.id)", :distinct => true})
  end
...