Ruby on rails Rails查询语法

Ruby on rails Rails查询语法,ruby-on-rails,syntax,Ruby On Rails,Syntax,我是Rails新手,我想知道两种查询语法之间的区别 我试过的第一个方法是: User.limit(8).order('created_at DESC').group('created_at').count 第二种似乎更有效、更强大: User.count(:order =>'DATE(created_at) DESC', :group =>["DATE(created_at)"], :limit => 8) 但我并不真正理解这两种方法的用例。 我相信这是显而易见的。。。

我是Rails新手,我想知道两种查询语法之间的区别

我试过的第一个方法是:

User.limit(8).order('created_at DESC').group('created_at').count
第二种似乎更有效、更强大:

User.count(:order =>'DATE(created_at) DESC', :group =>["DATE(created_at)"], :limit => 8) 
但我并不真正理解这两种方法的用例。 我相信这是显而易见的。。。
谢谢

第二种语法是不推荐的、老派的语法。也称为哈希选项重载。第一种是链式语法。第一种是rails 3语法。这里使用的每种方法,即,
限制、顺序、组
都是
ActiveRecord::Relation
方法。使用第一种方法有多种优点。除了资产管道等,关系是rails 3的核心特性之一

请看这个,


第二个是强大而高效的。因为第一个将获取所有行(和所有列),然后它将计数。但是第二个将只执行对行的计数

第二个将使用以下查询


从tablename中选择count(*)

所以我应该只使用第一个?Everywhere?另外,不推荐的方法有一个方便的方法,在我的示例中,我想按天对项目进行分组,但创建的字段也有时间。约会的事替我处理。我应该如何在另一个例子中重现它?目前它按完整日期时间分组。错误,第二个与第一个完全相同。获取内存中所有行并进行计数的是
User.find(…).length
,它将查询转换为数组,然后计算数组的长度。新语法最有趣的功能是,您可以逐步构建查询,如
@users=@users.where(somecondition)if params[:blah].present?
。您也可以在定义作用域时使用它们:
scope:buckoo{where(blah).order(“field”)}