結合と選択ステートメントの両方を含むクエリから返されたデータを表示するために、will_paginate を使用しています。データをページ分割すると、クエリの後に paginate が呼び出され、クエリに含まれる要素が paginate レポートよりも少ないにもかかわらず、エントリの数は select ステートメントを実行する前のエントリの数と等しくなります。
@sales = Sale.joins(:line_items).where(company_id: company_id, status: ['Complete', 'Voided'], time: (midnight_1..midnight_2)).order('id DESC')
puts @sales.length
14
@sales = @sales.select('distinct sales.*')
puts @sales.length
4
@sales.paginate(:per_page => 4, :page => params[page])
puts @sales.total_entries
14
これにより、空のページへのリンクが表示されます。