Rails RESTful 应用程序中的分页和排序

Posted

技术标签:

【中文标题】Rails RESTful 应用程序中的分页和排序【英文标题】:Pagination and sorting in a Rails RESTful application 【发布时间】:2010-10-15 03:55:20 【问题描述】:

关于如何在 Rails 应用程序中对资源实现排序和分页并仍然保持 RESTful 的任何提示?

如何以干净的方式映射页码和排序字段的参数? (我目前正在为我的应用程序中的每个资源使用 map.resources :x

我应该知道的任何其他性能问题? (例如缓存)

提前致谢。

编辑我将问题重新表述为更多generic one,希望我能得到更多答案。我将投票关闭这个,因为它不再相关。感谢 insane-dreamer 和 vrish88 的回答。

【问题讨论】:

【参考方案1】:

我建议你看看这篇文章:

http://dev.nozav.org/rails_ajax_table.html

http://dev.nozav.org/ajaxtable/(这是演示应用程序)

我在我的一个应用程序中使用了相同的基本代码。我没有使用他们描述的 AJAX 实现,但我使用了他们提到的排序助手,然后我构建了我的视图以启用排序。在排序助手中,您只想取出与 ajax 相关的东西。我的最终看起来像这样:

def sort_link_helper(text, param)
  key = param
  key += "_reverse" if params[:sort] == param
  parameters = params.merge(:sort => key, :page => params[:page], :action => controller.action_name )
  link_to(text, url_for(parameters))
end

def sort_td_class_helper(param)
  result = 'class="sortup"' if params[:sort] == param
  result = 'class="sortdown"' if params[:sort] == param + "_reverse"
  return result
end

这个实现最好的部分是它是 RESTful、DRY 和易于使用的!

【讨论】:

感谢您的回复,但是.. 在这种情况下缓存呢?我想我会遇到这个问题。此外,恕我直言,使用 "?page=x&sort=y" 不是很干净。 嗯,我对缓存不太了解,但你不能只存储 sql 查询的结果,然后对缓存中的结果进行排序吗?此外,我不知道任何其他方式来存储页面和排序变量是有意义的......但我愿意接受建议 "注意:页面缓存会忽略所有参数,因此 /products/list?page=1 将作为 /products/list.html 写入文件系统,如果有人请求 /products/list?page =2,它们将返回与page=1相同的结果。页面缓存URL中的GET参数时要小心!” 看看这个:railsenvy.com/2007/2/28/rails-caching-tutorial#pagination。它摆脱了分页问题,​​但没有解决排序问题。【参考方案2】:

你试过 will_paginate 吗?是否有某些原因它不能满足您的特定需求? (http://github.com/mislav/will_paginate/tree/master)

【讨论】:

我已经在使用 will_paginate 插件了。我希望有更多关于 REST 部分的答案。我想我会重新提出问题,删除“特定于导轨”的部分。

以上是关于Rails RESTful 应用程序中的分页和排序的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs - 基于远程数据的分页和缓冲网格,没有远程分页和过滤

DjangoQuerySet的分页和排序

cakephp 3.3:模型在url中时的分页和排序错误

jqgrid能前台分页么?jqgrid前端分页和排序的实现

用于排序、分页和过滤的 CodeIgniter 优雅库 [关闭]

RESTful API 设计中的分页问题