will_paginate报告的条目和页面太多

时间:2012-05-24 15:19:59

标签: ruby-on-rails will-paginate

我正在使用will_paginate来显示从包含联接和select语句的查询返回的数据。当我对数据进行分页时,条目数等于执行select语句之前的条目数,即使在查询后调用了paginate,并且查询包含的元素少于分页报告。

@sales = Sale.joins(:line_items).where(company_id: company_id, status: ['Complete', 'Voided'], time: (midnight_1..midnight_2)).order('id DESC')
puts @sales.length

14

@sales = @sales.select('distinct sales.*')
puts @sales.length

4

@sales.paginate(:per_page => 4, :page => params[page])
puts @sales.total_entries

14

这会导致显示指向空白页面的链接。

2 个答案:

答案 0 :(得分:10)

使用will_paginate进行分页并加入has_manyhas_and_belongs_to_many关联,或者实际上任何分页解决方案总是稍微困难一些。

如果您不需要查询已加入的关联,则可以将其删除。您失去了在一个查询中获取关联订单项的好处,但您不会丢失

如果您需要对其进行查询,并且您可能希望销售只包含订单项,则需要将:count选项传递给paginate调用,该调用指定用于调用的其他选项来计算如何有很多项目。在你的情况下:

@sales.paginate(:per_page => 4, 
    :page => params[page], 
    :count => {:group => 'sales.id' })

答案 1 :(得分:1)

假设您的销售模式has_many:line_items,通过加入,您将获得每个相关'line_item'的'销售'条目。