首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails对数组项逐个分页,而不是逐页分页

Rails对数组项逐个分页,而不是逐页分页
EN

Stack Overflow用户
提问于 2010-06-08 04:32:07
回答 2查看 889关注 0票数 2

我有一组资产,我们称它们为“实践者”。我在日程表界面的标题中显示这些从业者。日历上有7栏。7列=每个视图/页面7个从业者。现在:

如果第一页显示从业者1-7,当您转到下一页时,您将看到从业者8-15,下一页16-23,等等。

我想知道如何分页从业者,这样如果第一页显示从业者1-7,下一页将显示从业者2-8,然后3-9,依此类推。

如果您能提供任何帮助,我将不胜感激。这是我正在使用的rails代码。

诚挚的问候,

哈里斯·诺维克

代码语言:javascript
运行
复制
# 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
)
EN

回答 2

Stack Overflow用户

发布于 2010-06-08 17:00:56

问得好!我猜这是WillPaginate没有真正考虑到的一件事。我将在这里查看WillPaginate的代码,但我实际上并没有测试这个解决方案。如果你打算尝试一下,请让我知道它是否对你有效。

WillPaginate::Collection中,逻辑被很好地分离了。您需要更改offsettotal_entries=方法的行为。你可以用子类化来做到这一点,但不幸的是,这意味着你不能再使用特殊的paginate查找器了。(它具有WillPaginate::Collection硬编码。)

您可能会在您的lib/中拥有如下内容

代码语言:javascript
运行
复制
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

然后,您的示例代码将如下所示:

代码语言:javascript
运行
复制
@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来处理的,比如计算出条目的总数并选择正确的条目。我想你可以创建一个帮助器,如果这是你打算经常做的事情。

票数 1
EN

Stack Overflow用户

发布于 2010-06-08 12:43:29

我认为LIMIT对你来说是可行的。我不知道如何使用分页,但你可以尝试如下

代码语言:javascript
运行
复制
LIMIT params[:page], 7

其中params:page是页码,因此对于第1页,它将显示1中的7行,即1-7;对于第2页,它将显示2中的7行,即2-8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2992934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档