1

配列のページネーションを行っています@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 ページ目などをクリックすると空白になります。ヌルです。これを修正する方法を知っている人はいますか?

4

1 に答える 1

3

あなたの問題は、すでにページ付けされているアクティビティとフィード項目を組み合わせて配列を構築していて、それを再度ページ付けしていることだと思います。

たとえば、アクティビティ モデルとフィード アイテム モデルが、1 ページあたり 20 アイテム程度のページ分割のデフォルトを使用しており、15 のアクティビティと 12 のフィード アイテムがあるとします。

1 ページ目では、この配列を組み合わせて、上位 10 個を表示します。@items には 27 のエントリがあったため、ページ 2 と 3 へのリンクを表示します。しかし、それをクリックすると、アクティビティのページ 2 とフィード アイテムのページ 2 を読み込もうとしています。これらはそれぞれ 20 未満であるため空です。

私の経験では、このようにいくつかのコレクションをページ分割しようとするのは非常に難しいです (すべてのコレクションを読み込んで配列をページ分割することができない限り)。最後の締め切り日を追跡するだけでよいため、「さらにアイテムを読み込む」ボタンの方が簡単です

于 2013-05-05T07:47:11.737 に答える