【问题标题】:Rails - Pagination gem showing all itemsRails - 显示所有项目的分页宝石
【发布时间】:2012-06-21 08:55:56
【问题描述】:

我正在使用分页 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 个的原因。我不不知道如何解决这个问题!任何帮助将不胜感激,谢谢!

【问题讨论】:

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


    【解决方案1】:

    我建议您使用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 %>
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      试试这个

      在控制器中:

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

      【讨论】:

        【解决方案3】:

        您应该在每个语句之前添加以下行

            <%= will_paginate @orders %>
        

        【讨论】:

        • 抱歉,在哪个语句之前?谢谢
        • @order.line_items.each 之前
        • 我认为你应该使用@orders.line_items.each
        • 这仍然不起作用 - 我已经尝试了这两种更改,但仍然没有区别:S
        • 真的很抱歉,顶部的代码错误,会改变我所拥有的!
        猜你喜欢
        • 1970-01-01
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多