Model pośredniczący i zliczanie z paginacją

Temat może nie być zbyt precyzyjny ale nie wiedziałem jak zatytułować mój problem :frowning:

@products = Product.includes(:likes) @products.sort! { |a,b| b.likes.size.to_i <=> a.likes.size.to_i }
Mam taki kod. Tabela Like posiada dwa pola (product_id i user_id), asocjacji możecie się łatwo domyślić :wink:

Tym powyższym kodem pobieram całą listę produktów i sortuję po ilości „lajków”. Teraz pytanie:

Czy i jak można to zrobić prościej/wydajniej i jak zaprzęgnąć do całości paginację (kaminari)?
Oczywiście, jak teraz do @products = … dodaję limit() czy page() to nie działa jak powinno… Jak to obejść (może być rozwiązanie z użyciem czystego SQL ale wolałbym tego uniknąć dla jaśniejszego kodu).

Możesz zastosować counter_cache, poczytaj tutaj: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to
Wtedy będziesz sortował po kolumnie trzymającej ilość like’ów w tabeli products.