2010-06-07 15 views
2

我有一組資產,我們稱之爲「從業者」。 我在日曆界面的標題中顯示這些從業者。 日曆有7列。每個視圖/頁面7列= 7個從業者。 現在:Rails paginate數組項逐個而不是逐頁

如果第一頁顯示你從業1-7,當你去下一個頁面,你會看到從業8-15,下頁16-23,等等,等等

我想知道如何頁面從業人員,如果第一頁顯示你從業人員1-7,下一頁將告訴你從業人員2-8,然後3-9,等等。

我將不勝感激任何幫助,你可以提供。 這裏是我正在使用的rails代碼。

最好的問候,

哈里斯諾維克

# 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頁它會顯示7行2即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負責處理,例如計算出條目的總數並選擇正確的條目。我想你可以創建一個幫手,如果這是你打算經常做的事情。

相關問題