ActiveRecord 和 ActiveRecord::Relation 对象之间的区别
Difference between ActiveRecord and ActiveRecord::Relation objects
我已经搜索过,但找不到关于 ActiveRecord 和 ActiveRecord::relation 对象之间区别的简要说明。
我了解到 ActiveRecord 是通过
之类的东西找到的单个对象
User.find(1)
而ActiveRecord::Relation是类似对象的数组通过类似
查找
User.where(id: 1)
我正在寻找它们在查询执行方面的区别或对它们的深入解释,因此它将清楚其背后的整个概念。
提前致谢!
当您通过查找方法使用记录并且数据库中不存在该记录时,您将得到以下错误
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 条件找到用户并且如果用户不存在于数据库中那么您将得到如下所示的空记录
User.where(id: 10)
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? [["id", 10]]
=> #<ActiveRecord::Relation []>
不会报错
ActiveRecord::Base
的实例是一个对象,表示您数据库的特定行(或者可能保存到数据库中)。
而 ActiveRecord::Relation
的实例表示可以针对您的数据库 运行 的查询(但还不是 运行)。一旦您 运行 通过调用 to_a
、each
、first
等查询 Relation
单个实例或 ActiveRecord::Base
个实例数组将被退回。
Rails 使用 activerecord 作为标准 ORM,但同样适用于 activerecord 本身。
简而言之:所有产生多条记录的查询,如范围、全部、位置和连接 return 一个 ActiveRecord::Relation
对象。你可以 chain 它们在一起,只有当你使用像 to_sql、first、each、any、to_a、take、last 等方法时,查询被执行并且 returns 是一个 ActiveRecord::Base
的数组而不是
所有这些都在following site
上解释
- 特别是 scopes, query methods and the examples for
pluck
部分显示了主要差异的所有细节
另请参阅
the rails API供参考
我已经搜索过,但找不到关于 ActiveRecord 和 ActiveRecord::relation 对象之间区别的简要说明。
我了解到 ActiveRecord 是通过
之类的东西找到的单个对象User.find(1)
而ActiveRecord::Relation是类似对象的数组通过类似
查找User.where(id: 1)
我正在寻找它们在查询执行方面的区别或对它们的深入解释,因此它将清楚其背后的整个概念。
提前致谢!
当您通过查找方法使用记录并且数据库中不存在该记录时,您将得到以下错误
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 条件找到用户并且如果用户不存在于数据库中那么您将得到如下所示的空记录
User.where(id: 10)
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? [["id", 10]]
=> #<ActiveRecord::Relation []>
不会报错
ActiveRecord::Base
的实例是一个对象,表示您数据库的特定行(或者可能保存到数据库中)。
而 ActiveRecord::Relation
的实例表示可以针对您的数据库 运行 的查询(但还不是 运行)。一旦您 运行 通过调用 to_a
、each
、first
等查询 Relation
单个实例或 ActiveRecord::Base
个实例数组将被退回。
Rails 使用 activerecord 作为标准 ORM,但同样适用于 activerecord 本身。
简而言之:所有产生多条记录的查询,如范围、全部、位置和连接 return 一个 ActiveRecord::Relation
对象。你可以 chain 它们在一起,只有当你使用像 to_sql、first、each、any、to_a、take、last 等方法时,查询被执行并且 returns 是一个 ActiveRecord::Base
的数组而不是
所有这些都在following site
上解释- 特别是 scopes, query methods and the examples for
pluck
部分显示了主要差异的所有细节
- 特别是 scopes, query methods and the examples for
另请参阅 the rails API供参考