Difference between ActiveRecord and ActiveRecord::Relation objects

半腔热情 提交于 2019-12-21 14:51:32

问题


I have searched but not able to find the brief explanation for the difference between ActiveRecord and ActiveRecord::relation object.

I have understand that ActiveRecord is the single object find by something like

User.find(1)

And ActiveRecord::Relation is the array like object Find by something like

User.where(id: 1)

I am looking for the difference between them in terms of query execution or deep explanation about them, so it will clear the whole concept behind it.

Thanks in advance!


回答1:


An instance of ActiveRecord::Base is an object that represents a specific row of your database (or might be saved into the database).

Whereas an instance of ActiveRecord::Relation is a representation of a query that can be run against your database (but wasn't run yet). Once you run that query by calling to_a, each, first etc. on that Relation a single instance or an array of ActiveRecord::Base instances will be returned.




回答2:


when you use record by find method and that record not present in the database than you will get below error

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

and if you find user by where condition and if user not present in database than you will get nill record like below

User.where(id: 10)


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

It will not give any error




回答3:


All this is explained on the following site

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

Rails uses activerecord as standard ORM but the same applies for activerecord on its own.

In short: all queries that yield multiple records like scopes, all, where, and joins return an ActiveRecord::Relation object. You can chain these together, and it is only when you use a method like to_sql, first, each, any, to_a, take, last etc that the query is executed.

See also http://api.rubyonrails.org/classes/ActiveRecord/Relation.html



来源:https://stackoverflow.com/questions/38325538/difference-between-activerecord-and-activerecordrelation-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!