2013-05-05 74 views
1

我分页数组@items为什么will_paginate显示第一页后的项目? (这是空过去页面1)

这里的相关负责人部分

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页或其他页面上,我得到一个空白。它是空的。任何人都知道我可以解决这个问题?

+0

我试了一下,你这个线内提到'@items = @ items.paginate(:页面=> PARAMS [ :page] .to_i,:per_page => 10)',但是这给了我一个'RangeError in StaticPagesController#home'' invalid page:0' error – user2159586 2013-05-05 07:26:26

+0

我试过这个'@items = @ items.paginate(:page => params [:page] .to_i || = 2,:per_page => 10)'但我得到相同的错误 – user2159586 2013-05-05 07:31:07

+0

我明白了。我更新为该'PARAMS [:页] || =“2''然后低于 '@items = @ items.paginate(:页=> PARAMS [:页] .to_i,:per_page => 10)'。发生了什么事情是,当我打开页面时,它自动进入分页的第二页,它工作。但是,进入第1页并再次点击第2页后,它显示为空 – user2159586 2013-05-05 07:39:35

回答

3

我觉得你的问题是,你是通过结合活动和饲料项目,其中已分页构建数组,然后你再次分页它。

例如,假设你的活动和饲料产品型号使用的是意志分页的默认设置,像每页并有15个活动和12个饲料项目20项。

在第1页你把这个数组,取前10名,并显示它们。 @items有27个条目,因此您可以看到指向第2页的链接& 3.但是,当您点击该条目时,您正在尝试加载第2页的Feed和第2页的Feed,因为每个Feed中的内容少于20个,因此为空。

以我的经验试图通过多个集合分页这样是非常棘手的(除非你可以加载所有这些,只是分页数组)。 “负载更多的物品”按钮更容易,因为你只需要跟踪哪些最后的截止日期是

+0

什么是创建“加载更多”按钮的简单方法?我的意思是它的实际编码与我拥有的阵列 – user2159586 2013-05-05 07:50:41

+0

那么你会跟踪最后created_at日期。您可以加载在该日期之前创建的前10个,而不是分页提要/活动。如果您有与日期相同的项目,可能会有点烦琐。 – 2013-05-05 07:55:18

相关问题