您的位置:首页 > 编程语言 > Ruby

Ruby on Rails,链式调用order,limit,offset方法对条件查询结果进行整理

2012-11-07 00:07 399 查看
/article/1390296.html

在《Ruby on Rails,使用where方法对持久化对象进行条件查询》我们学习到可以通过where方法进行条件查询操作返回对象列表。

还有三个方法可以对返回的列表进行操作以便得到我们想要的结果集。

order方法对结果进行排序,比如将返回的对象按照名称升序排列、按照创建时间降序排列等。

limit方法对结果的数量进行限制,比如数据库中有成千上万的注册用户,我们不希望一下子把这些用户的信息都取出来,而是希望将这些用户分页显示,点击下一页才进行下一次读取。

limit方法读取第一页的N个用户,第二页需要返回的用户都需要将前面的N记录跳过,这里就用到了offset方法。

所以说,order;limit;offset方法配合使用就可以实现分页功能。

之前提到的find方法也有这三个功能比如,将所有Subject对象按照position的值升序排列后,跳过前面的40个,返回20条对象:

Subject.find(:all, :order=> "position ASC", :limit => 20, :offset => 40)


前面提到了,find已经被where替代了,并已标注了不建议使用。所以记住以后要使用where配合三个独立方法哦!

Subject.order("position").limit(20).offset(40)


limit和offset方法参数非常简单也用以理解,都是一个整数分别意味着限制记录的个数和跳过记录的个数。

order方法的参数接受一个sql语法的条件,格式是

table_name.column_name ASC/DSC


如果对象涉及一个表的话,可以不指定表名。不指定排序方向的话,缺省是升序。

不过我觉得最好还是别偷懒都写上吧,以增加程序的可读性和避免混乱。尤其是一个对象是由多个表join在一起以及各个表中有相同名字字段的时候。

所以上面的查询语句最好写成

Subject.order("subject.position ASC").limit(20).offset(40)


对于布尔值,false值是0,true值是1,排序的使用用得上。

/article/1390296.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: