6

結合と選択ステートメントの両方を含むクエリから返されたデータを表示するために、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

これにより、空のページへのリンクが表示されます。

4

2 に答える 2

10

ページネーションや、will_paginate との関連付け、または実際のページネーション ソリューションhas_manyへの参加は、常に少し難しくなります。has_and_belongs_to_many

結合された関連付けに対してクエリを実行する必要がない場合は、削除できます。関連する広告申込情報を 1 回のクエリで取得するメリットは失われますが、それほど失うものではありません。

それを照会する必要があり、おそらく明細項目のみを含む売上が必要な場合は、呼び出しに使用される追加オプションを指定する :count オプションを paginate 呼び出しに渡す必要があります。それは。あなたの場合:

@sales.paginate(:per_page => 4, 
    :page => params[page], 
    :count => {:group => 'sales.id' })
于 2012-05-24T15:38:22.980 に答える
1

あなたの Sale モデルが :line_items を多数持っていると仮定すると、参加することで、関連するすべての「line_item」の「sales」エントリを取得することになります。

于 2012-05-24T15:27:11.730 に答える