Sto utilizzando Kaminari per impaginare alcuni risultati di una query in cui sto selezionando record distinti. Si consideri il seguente codice di controllo:Forzare ActiveRecord al conteggio distinto (con Kaminari)
@things = Thing.joins... # create a complex query that produces duplicate results
# I want to select distinct results: this produces the correct results
@things = @things.select("DISTINCT things.*")
# when Kaminari calls count, it will run "SELECT COUNT(*)", instead of
# "SELECT COUNT(DISTINCT things.*)" we will get the wrong count and extra pages
@things = @things.page(params[:page]).per(10)
La soluzione migliore che mi viene in mente è quello di passare :distinct => true
-count
, come in this pull request, che è stata respinta dallo sviluppatore di Kaminari. This SO question discute il problema sottostante. This line of code è la chiamata all'origine di count
.
Esistono soluzioni alternative che forniranno a Kaminari il conteggio corretto che non prevede il patching di Kaminari? Grazie.
UPDATE:
- Utilizzando un ambito denominato "conteggio" è un grande suggestione, ma non funziona quando viene chiamato su un ActiveRecord :: Relation. Funziona quando viene chiamato sulla mia classe modello, ma ciò non aiuta.
Si suppone che sia più di un commento? – apneadiving
Sì, se l'OP dovesse definire un ambito sul Modello e denominarlo conteggio, allora sarebbe in grado di controllare cosa fa la libreria quando tenta di ottenere un conteggio dal modello. – LeakyBucket
continua a fornire dettagli e questo potrebbe essere ok: le risposte dovrebbero essere chiare. Altrimenti, fornisci suggerimenti come commenti. – apneadiving