복붙노트

[RUBY-ON-RAILS] will_paginate와 루비의 배열을 Paginating

RUBY-ON-RAILS

will_paginate와 루비의 배열을 Paginating

나는 다음과 같다 @ 레벨 1 배열을 가지고 :

[[3.0, 4, 2], [2.0, 48, 3], [2.1, 56, 4], ............]

나는 한 번에이 배열 등 각 페이지가 표시 몇 행에 페이지 매김을 적용 할. 나는이 시도 :

@temp1 = @level1.paginate(:page => params[:page])

그러나 다음과 같은 오류가 발생합니다 :

undefined method `paginate' for [[3.0, 4, 2], [2.0, 48, 3], [2.1, 56, 4]]:Array

어떻게하면이 사용 will_paginate에 페이지 매김을 수행 할 수 있습니다?

해결법

  1. ==============================

    1.물론, 당신은 컬렉션을 통해 임의의 페이지 매김을 구성 WillPaginate :: 컬렉션을 사용할 수 있습니다. 배열 값이라고 가정하면 :

    물론, 당신은 컬렉션을 통해 임의의 페이지 매김을 구성 WillPaginate :: 컬렉션을 사용할 수 있습니다. 배열 값이라고 가정하면 :

    @values = WillPaginate::Collection.create(current_page, per_page, values.length) do |pager|
      pager.replace values
    end
    

    당신은 will_paginate보기 도우미에 전달 포함한 다른 모든 WillPaginate 수집 등의 후 치료 @values을 할 수 있습니다.

  2. ==============================

    2.https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/array.rb 참조

    https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/array.rb 참조

    당신이 그것을 시도하고 그것이 잘 작동하기 전에 그냥 'will_paginate / 배열을'이 필요합니다. 만약 그랬다면, 난은 설정 / initalizers / will_paginate_extensions.rb 그래서의 사용 가능한 즉시 사방에서 말에 그것을 넣어 것입니다.

  3. ==============================

    3.레일 프로젝트에서 수집 배열을 감안할 때

    레일 프로젝트에서 수집 배열을 감안할 때

    will_paginate ~>3.0.5
    
    collection.paginate(page: params[:page], per_page: 10)
    

    배열 값의 페이지 매김을 반환합니다.

    컨트롤러의 상단에 'will_paginate / 배열을'필요 잊지 마세요.

  4. ==============================

    4.이의 대답에 본사를 둔 내 예입니다 @ 크리스 - 종광

    이의 대답에 본사를 둔 내 예입니다 @ 크리스 - 종광

    products = %w(i love ruby on rails)
    @products = WillPaginate::Collection.create(params[:page], params[:per_page], products.length) do |pager|
       pager.replace products[pager.offset, pager.per_page]
    end
    
  5. ==============================

    5.나는이 스레드에서 제공하는 답변 정말 행복하지 않았다.

    나는이 스레드에서 제공하는 답변 정말 행복하지 않았다.

    나는이 솔루션을 함께했다.

    # app/lib/paged_array.rb
    
    require 'will_paginate/array'
    
    class PagedArray
      delegate_missing_to :@paged_collection
    
      def initialize(collection, page: 1, per_page: 20)
        @paged_collection = collection.paginate(
          page: page,
          per_page: per_page
        )
      end
    end
    

    그리고 당신은 그런 식으로 사용할 수 있습니다 :

    superheroes = %w[spiderman batman superman ironman]
    
    PagedArray.new(superheroes, page: 1, per_page: 2)
    

    그것은 명시 이후 나는이 솔루션을 좋아하고 당신은 당신의 표준 클래스를 오염되지 않습니다.

    존재가 말했다 내가 "delegate_missing_to"를 사용하기 때문에, 당신은 레일 따라 달라집니다.

  6. from https://stackoverflow.com/questions/13187076/paginating-an-array-in-ruby-with-will-paginate by cc-by-sa and MIT license