0

我正在使用分页 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

我建议您使用Kaminari,它看起来是一种更清洁的做事和实施方式

在您的控制器中

@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 回答