
Advanced ActiveRecord Queries
Query interface, where, joins, includes, eager loading, N+1 problem, transactions, locking (optimistic/pessimistic)
1Which ActiveRecord method retrieves a record by its primary key and raises an exception if not found?
Which ActiveRecord method retrieves a record by its primary key and raises an exception if not found?
回答
The find method retrieves a record by its primary key and raises an ActiveRecord::RecordNotFound exception if the record does not exist. This ensures the code fails explicitly rather than continuing with a nil value. To avoid the exception and return nil instead, use find_by(id: value).
2What is the main difference between find_by and where.first in ActiveRecord?
What is the main difference between find_by and where.first in ActiveRecord?
回答
find_by directly returns a single record or nil, while where.first returns an ActiveRecord relation then calls first to get the first result. In practice, find_by generates an optimized query with LIMIT 1, whereas where can potentially load more data before selecting the first element.
3How to pass multiple conditions to the where method in ActiveRecord?
How to pass multiple conditions to the where method in ActiveRecord?
回答
The where method accepts a hash with multiple keys to specify multiple conditions that will be combined with AND. For example, User.where(status: 'active', role: 'admin') generates WHERE status = 'active' AND role = 'admin'. For OR conditions, use or or raw SQL queries.
What is the N+1 problem in ActiveRecord?
Which method to use to solve the N+1 problem by preloading associations?
+25 面接問題