Rails - 显示所有项目的分页宝石

时间:2012-06-19 10:17:06

标签: ruby-on-rails pagination gem has-many

我正在使用分页宝石来分页客户订单。我必须通过数据库使用关系来显示订单:

<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.我不喜欢不知道怎么解决这个问题!非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

您应该在每个声明之前在视图中添加以下行

    <%= will_paginate @orders %>

答案 1 :(得分: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>

答案 2 :(得分: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 %>

我希望它有所帮助