ActiveRecord和ActiveRecord :: Relation对象之间的区别

我已搜索但无法找到ActiveRecord和ActiveRecord :: relation对象之间差异的简要说明。

我知道ActiveRecord是通过类似的东西找到的单个对象

User.find(1) 

而ActiveRecord :: Relation就是像对象一样的数组

 User.where(id: 1) 

我在查询执行或对它们的深入解释方面寻找它们之间的区别,因此它将清除它背后的整个概念。

提前致谢!

ActiveRecord::Base的实例是一个对象,它表示数据库的特定行(或者可能保存到数据库中)。

ActiveRecord::Relation的实例是可以针对您的数据库运行的查询的表示(但尚未运行)。 一旦通过调用to_aeachfirst等在该Relation上运行该查询,将返回单个实例或ActiveRecord::Base实例的数组。

当你使用find方法记录时,数据库中没有的记录比你得到的错误要多

 User.find(10) User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] ActiveRecord::RecordNotFound: Couldn't find User with 'id'=10 

如果你找到用户的条件,如果用户不在数据库中,你将获得如下所示的nill记录

 User.where(id: 10) User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? [["id", 10]] => # 

它不会给出任何错误

所有这些都在以下网站上解释

http://guides.rubyonrails.org/active_record_querying.html

Rails使用activerecord作为标准ORM,但同样适用于activerecord。

简而言之:产生多个记录(如scope,all,where和join)的所有查询都返回一个ActiveRecord::Relation对象。 您可以将这些链接在一起,只有当您使用类似to_sql的方法时,首先,每个,任何,to_a,take,last等执行查询。

另见http://api.rubyonrails.org/classes/ActiveRecord/Relation.html