0

pagination gem を使用して、顧客の注文をページ付けしています。データベースを介して関係を使用して注文を表示する必要がありました。

<table class="order-items">
<th>Date</th>
<th>Order No.</th>
<th>View Order</th>
<% @customer.orders.each do |order| %>
    <tr>
        <td><%= order.created_at.strftime("%d %b. %Y") %></td>
        <td><%= order.id %></td>
        <td><%= link_to 'Show',  "../orders/#{order.id}" %></td>
    </tr>
<% end %>   
</table>

<p><%= will_paginate @orders %></p>

そして私のコントローラーのコード:

  @customer = Customer.find(params[:id])
  @order = @customer.orders
  @orders = @order.paginate page: params[:page], order: 'title',
  per_page: 5

この顧客がテストするために、6 つの注文を作成しました。私が抱えている問題は、ページネーション ページが下部 (2 ページ) に正しく表示されることですが、リストには 6 つの注文がすべて表示され、両方のページネーション ページに 6 つの注文がすべて表示されます。

他のすべてのページでページネーションを正常に機能させることができたので、そこに order.line_items.each コンストラクトがあるためだと思います-そのため、6つすべてが表示されます.わかりませんただし、これを修正する方法!どんな助けでも大歓迎です、ありがとう!

4

3 に答える 3

1

これを試して

コントローラー内:

 @customer = Customer.find(params[:id])
 @order_items = @customer.orders.paginate(:page => params[:page], :per_page => 5)

ビューで:

<table class="order-items">
<th>Date</th>
<th>Order No.</th>
<th>View Order</th>

<%= will_paginate @order_items %>

<% @order_items.each do |order| %>
<tr>
    <td><%= order.created_at.strftime("%d %b. %Y") %></td>
    <td><%= order.id %></td>
    <td><%= link_to 'Show',  "../orders/#{order.id}" %></td>
</tr>
<% end %>   
</table>
于 2012-06-19T11:38:12.953 に答える
1

各ステートメントの前にビューの下に行を追加する必要があります

    <%= will_paginate @orders %>
于 2012-06-19T10:27:49.730 に答える
0

よりクリーンなやり方と実装方法に見えるカミナリを使用することをお勧めします

コントローラーで

@orders = Kaminari.paginate_array(Customer.find(params[:id]).orders).page(params[:page])

モデルで、必要なページごとに割り当てます

paginates_per 10

あなたの見解では

<% @orders.each do |order| %>
<tr>
    <td><%= order.created_at.strftime("%d %b. %Y") %></td>
    <td><%= order.id %></td>
    <td><%= link_to 'Show',  "../orders/#{order.id}" %></td>
</tr>
<% end %>

<%= paginate @orders %>

役立つことを願っています

于 2012-06-19T18:38:49.027 に答える