2010-06-07 3 views
2

나는 자산 그룹을 가지고 있는데, 이들을 "실무자"라고 부르 자. 나는이 실무자를 캘린더 인터페이스의 헤더에 표시하고 있습니다. 캘린더에는 7 개의 열이 있습니다. 7 열 =보기/페이지 당 7 명의 실무자. 지금 :레일은 페이지 단위가 아닌 배열 항목을 하나씩 페이지 매기기

첫 페이지는 1-7 실무자 보인다면, 당신은 다음 페이지를 이동 할 때 실무자 8-15을 볼 수, 다음 페이지 16-23, 등 등

내가 궁금 개업의 사람들에게 첫 페이지에 실무자 1-7이 표시되면 다음 페이지에 실무자 2-8, 3-9 등이 표시됩니다.

제공. 여기에 은 제가 작업중인 레일 코드입니다.

안부,

해리스 ​​노빅

# get the default sort order 
sort_order = RESOURCE_SORT_ORDER 

# if we've been given asset ids, start our list with them 
unless params[:asset_ids].blank? 
    params[:asset_ids] = params[:asset_ids].values unless params[:asset_ids].is_a?(Array) 
    sort_order = "#{params[:asset_ids].collect{|id| "service_provider_resources.id = #{id} DESC"}.join(",")}, #{sort_order}" 
end 

@asset_set = @provider.active_resources(:include => {:active_services => :latest_approved_version}).paginate(
    :per_page => RESOURCES_IN_DAY_VIEW, 
    :page => params[:page], 
    :order => sort_order 
) 

답변

0

나는 LIMIT 당신을 위해 작동합니다 생각합니다. 내가 매김을 사용 모르지만 당신이 다음 시도 할 수

LIMIT params[:page], 7 

경우 PARAMS [: 페이지] 페이지 번호, 그래서 페이지 1은 1, 즉 1-7 Smilarly에서 7 개 행을 보여줄 것이다, 2 페이지에서 2 행에서 7 행을 표시합니다. 2-8

1

좋은 질문입니다! WillPaginate가 실제로 설명하지 않는 한 가지라고 생각합니다. 여기서 WillPaginate의 코드를 살펴볼 것입니다. 그러나 실제로이 솔루션을 테스트하지는 않았습니다. 그것을 시도하려는 경우, 그것이 당신을 위해 일한 경우 알려주십시오.

논리가 잘 구분되어 있습니다 (WillPaginate::Collection). offsettotal_entries= 메서드의 동작을 변경해야합니다. 하위 클래스로이 작업을 수행 할 수는 있지만, 불행히도 특수한 paginate 파인더를 더 이상 사용할 수 없다는 것을 의미합니다. (그것은 하드 WillPaginate::Collection 있습니다.)

당신은 아마 당신 lib/에 다음과 같이, 수 :

class SlidingWindowCollection < WillPaginate::Collection 
    def offset 
    current_page - 1 
    end 

    def total_entries=(number) 
    @total_entries = number.to_i 
    @total_pages = [@total_entries - per_page, 1].max 
    end 
end 

를 그리고, 당신의 예제 코드는 같을 것이다 : 사용이

@asset_set_scope = @provider.active_resources(:include => {:active_services => :latest_approved_version}) 
@asset_set = SlidingWindowCollection.create(params[:page], RESOURCES_IN_DAY_VIEW, @asset_set_scope.count) do |pager| 
    pager.replace(@asset_set_scope.all(:offset => pager.offset, :limit => pager.per_page, :order => sort_order)) 
end 

조금 더 복잡합니다. 모든 여분의 물건은 일반적으로 특수 검색기 paginate에 의해 처리됩니다 (예 : 총 항목 수를 알아 내고 올바른 항목을 선택하는 경우). 나는 당신이 할 일이 있다면 당신이 도우미를 만들 수 있다고 생각합니다.