我正在使用分页宝石来分页客户订单。我必须通过数据库使用关系来显示订单:
<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.我不喜欢不知道怎么解决这个问题!非常感谢任何帮助,谢谢!
答案 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 %>
我希望它有所帮助