为什么不会在第一页后显示项目? (它在第1页之后为空)

时间:2013-05-05 06:44:27

标签: ruby-on-rails ruby arrays will-paginate

我正在对数组@items

进行分页

这是相关的控制器部分

class StaticPagesController < ApplicationController

  def home
    if signed_in?
      @post = current_user.microposts.build
      @activities = PublicActivity::Activity.order("created_at desc").paginate(page: params[:page]) 
      @feed_items = current_user.feed.paginate(page: params[:page]) 
      @items =  (@feed_items + @activities)
      @items.sort_by! {|item| -item.created_at.to_i}
      @items = @items.paginate(:page => 1, :per_page => 10)
     else
    redirect_to '/signin' 
    end
  end

基本上,这就是我正在使用的那条线。

@items = @items.paginate(:page => 1, :per_page => 10)

我也尝试将其更改为下面的代码但不起作用。

@items = @items.paginate(page: params[:page], :per_page => 10)

内部initializers\will_paginate_array_fix.rb 我有这条线

require 'will_paginate/array'

在我看来,我正在使用这个

 <%= render partial: 'shared/item', collection: @items %>
   <%= will_paginate @items %>

对于第一页似乎工作正常,但是当我点击第2页或第3页或其他页面时,我得到一个空白。它是空的。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我认为你的问题是你是通过组合活动和Feed项来构建你的数组,这些项目已经分页,然后你再次对它进行分页。

例如,假设您的活动和Feed项模型使用will paginating默认值,类似于每页20个项目,并且有15个活动和12个Feed项。

在第1页上,您组合了这个数组,进入前10并显示它们。 @items有27个条目,因此您显示指向第2页和第2页的链接。 3.但是当你点击它时,你正试图加载第2页的活动和第2页的供稿项,这些项目是空的,因为每个项目少于20个。

根据我的经验,尝试通过这样的几个集合进行分页是非常棘手的(除非你可以加载所有这些并且只是对数组进行分页)。 “加载更多项目”按钮更容易,因为您只需跟踪上一个截止日期