質問

かくしているところを見落とさないようにシンプルでこちら:

ようにしている展示シリーズのページを含むのインスタンスの二つの異なるモデル-プロファイルグループでご利用いただけます。って順序付けその名前の属性。していますが、すべてのインスタンス毎にモデルし、設定がこの感じずさんならびに非効率的です。

を使用していmislav-will_paginate、英語上級者の方にお尋ねしたいのより良い方法を実現。のようなもの:

[Profile, Group].paginate(...)

なげていくことができれば理想で!

役に立ちましたか?

解決

良い質問を行ったのと同じ問題のカップルです。各時間まで書いて自分のsqlクエリーに基づくsql労働組合での作品とは、sqlite、mysql).そして、ご利用設定を結果http://www.pathf.com/blogs/2008/06/how-to-use-will_paginate-with-non-activerecord-collectionarray/).忘れずに行ってクエリをカウントを行った。

一部のコード(確認しておりません)

my_query = "(select posts.title from posts) UNIONS (select profiles.name from profiles)"
total_entries = ActiveRecord::Base.connection.execute("select count(*) as count from (#{my_query})").first['count'].to_i

results = ActiveRecord::Base.connection.select_rows("select * from (#{my_query}) limit #{limit} offset #{offset}")

でoverkilled?かんにとって、最小限のお問い合わせの結果を統一しています。

希望です。

注意:を取得する場合のオフセット値からのhttp paramを使用してみてくださいsanitize_sql_for_conditions(ie:sqlインジェクション....)

他のヒント

あなたが近いような何かをやって取得することができます:

@profiles, @groups = [Profile, Group].map do |clazz|
  clazz.paginate(:page => params[clazz.to_s.downcase + "_page"], :order => 'name')
end

これは、ページパラメータprofile_pagegroup_pageを使用してページ付けます。あなたが使用して正しいページを使用するビューでwill_paginateコールを取得することができます:

<%= will_paginate @profiles, :page_param => 'profile_page' %>
....
<%= will_paginate @groups, :page_param => 'group_page' %>

それでも、私が個別に@groups@profilesを設定の上に大きなメリットがありますかわからない。

私が問題に立ち往生私の最後のプロジェクトで、私は私の検索機能では、単一のページネーションで複数のモデルをページ付けする必要がありました。 それは最初のモデルは、最初のモデルの結果は、第2のモデルは、Facebookのフィード同じように、1つの検索フィードように結果と第三を継続しなければならないときに最初に表示されなければならないような方法で動作するはずです。 これは私がこの機能を実行するために作成した関数である。

def multi_paginate(models, page, per_page)

  WillPaginate::Collection.create(page, per_page) do |pager|

    # set total entries
    pager.total_entries = 0
    counts = [0]
    offsets = []
    for model in models
          pager.total_entries += model.count
          counts << model.count
          offset = pager.offset-(offsets[-1] || 0)
          offset = offset>model.count ? model.count : offset 
          offsets << (offset<0 ? 0 : offset)
    end

    result = []
    for i in 0...models.count
          result += models[i].limit(pager.per_page-result.length).offset(offsets[i]).to_a
    end

    pager.replace(result)
  end

end
誰もが、それは私がフォークして、ライブラリにそれをコミットします正常に動作することを確認した場合は、

それを試してみて、あなたはそれで何か問題があるなら、私に知らせて、私はまた、リポジトリをwill_paginateべき問題として、それを投稿しました。 https://github.com/mislav/will_paginate/issues/351する

あなたは、自分のpaginatorsで2つの異なる結果セットを表示し、AJAXを経由してそれらを更新しようとしたことがありますか?それは正確に何をしたいではありませんが、結果は同じです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top