Я думаю, что вы должны прийти к прямому решению, используя 2 запроса:
- Один для выбора
- Один для общего подсчета
Этопростейшее решение по сравнению с другими, и его легко понять.
Во-вторых, я думаю, что подойдет любая нумерация страниц, но если вы не используете все функции, это того не стоит.
Не ограниченок этому вы все равно можете выполнить один запрос, но счет будет привязан к каждой записи, а производительность ничем не лучше.
# Ref: https://stackoverflow.com/a/17206119/1600046
records = company.public_send(table).joins(:customer).where(customer_id: ids).order(sorting)
records = records.select("table_name.*, COUNT(*) OVER () as total").limit(1)
records.first.try(:total) # in case empty record