问题
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