Welcome 微信登录

首页 / 软件开发 / JAVA / Ruby on rails开发从头来(四十七)- ActiveRecord基础(强大的find方法)

Ruby on rails开发从头来(四十七)- ActiveRecord基础(强大的find方法)2011-12-04 博客园 Cure现在我们知道如何指定条件,现在我们来看看find方法支持的一些其他设置。

首先,理解find(:first,…)方法是非常重要的,该方法在同样的conditions设置下,和find(:all,…)方法生成同样的sql语句,不同之处仅在于只返回一条记录。在调用的时候,一种的参数为:first,另一种为:all。

find方法执行一个select from这样的sql语句,:all标记指定返回表中所有的记录,:first返回第一条记录。但是现在:first还不能保证你得到的就是表中的第一条记录,原因是什么?我们继续往下看。

:conditions参数指定了SQL语句的where部分,可以包含Sql语句或者包含可以替换的参数的名字,值,上一篇我们已经做了了解。

daves_orders = Order.find(:all, :conditions => "name = "Dave"")name = params[:name]other_orders = Order.find(:all, :conditions => ["name = ?", name])yet_more = Order.find(:all,:conditions => ["name = :name and pay_type = :pay_type",params])
上面的find方法并不能保证按照特定的顺序返回记录,除非指定查询的排序(order by)部分。:order参数就是用来指定SQL的排序条件的,下面的例子演示了查询名字为Dave的订单,并且按照pay_type,shipped_at字段进行降序排列。

orders = Order.find(:all,:conditions => "name = "Dave"",:order => "pay_type, shipped_at DESC")
我们还可以设置:limit参数来限制返回的记录数,如果你使用:limit参数,或许还想指定排序条件,下面的例子返回10条记录,并且按照指定条件排序:

orders = Order.find(:all,:conditions => "name = "Dave"",:order => "pay_type, shipped_at DESC",:limit => 10)
参数:offset经常与:limit参数一同出现,用来指定从第一条记录起,返回指定的偏移量,下面代码演示了:offset参数的使用:

def Order.find_on_page(page_num, page_size)find(:all,:order => "id",:limit => page_size,:offset => page_num*page_size)end