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
如果你通过where条件找到用户,如果用户不在数据库中,你将得到如下的nill记录
User.where(id: 10)
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? [["id", 10]]
=> #<ActiveRecord::Relation []>
3条答案
按热度按时间wfauudbj1#
ActiveRecord::Base
的示例是一个对象,它表示数据库的特定行(或者可能保存到数据库中)。然而,
ActiveRecord::Relation
的示例是可以对数据库运行的查询的表示(但尚未运行)。一旦您通过调用to_a
,each
,first
等在Relation
上运行该查询,将返回单个示例或ActiveRecord::Base
示例的数组。laik7k3q2#
Rails使用activerecord作为标准的ORM,但这同样适用于activerecord本身。
简而言之:所有产生多个记录的查询,如scopes,all,where和joins,都会返回一个
ActiveRecord::Relation
对象。您可以将这些对象链接在一起,只有当您使用to_sql,first,each,any,to_a,take,last等方法时,才会执行查询并返回一个ActiveRecord::Base
数组。pluck
示例的部分,展示了主要差异的所有细节unhi4e5o3#
当你使用记录通过查找方法和记录不存在于数据库比你会得到下面的错误
如果你通过where条件找到用户,如果用户不在数据库中,你将得到如下的nill记录
它不会给予任何错误