Rails Active Record query 返回值问题

匿名 · 2013年08月23日 · 最后由 llwang 回复于 2016年11月14日 · 2689 次阅读

ActiveRecord 查询返回值为什么有两种类型。例如:

User.find_by_age(20).class 

这里是一个 Array 类

User.where(:age => 20).class

这里是一个 ActiveRecord::Relation 类

我查了一下资料,说是 where,select,gruop 等返回的是 ActiveRecord::Relation 类。那么 ActiveRecord::Relation 类有什么作用?同样的是查询,两种方法返回的类型不一样,这是出于什么样的考虑呢?

ActiveRecord::Relation 带来的好处是可以连续 . . . 比如:

User.where(:age => 20).where(:name => "xx").order("id desc").skip(100).limit(50)

# 或者复杂的组合查询可以先放到变量里面
@query = User.where(:age => 20)

if params[:name]
  @query = @query.where(:name => params[:name])
end

if params[:sort]
  @query = @query.order("id desc")
end

@users = @query.limit(10) # 直到这个时候,SQL 的查询都还是没有发出去的,直到遇到 to_a 的方法调用才会将前面所有的组合起来成一个 SQL 来执行

#1 楼 @huacnlee 我想来求证下,如果 find_by 查询不添加 limit 是不是就会返回一条记录,用 where 就会返回一个 list

#3 楼 @huacnlee 谢谢顺哥。find_by 是返回符合条件的一条记录。where 是返回符合条件的所有记录。那有没有用 find_by 查询显示多个记录的(再不知道有几条记录的情况下,把所有的记录全返回)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号