April 17, 2019
This blog is part of our Rails 6 series.
Before Rails 6, if we want to extract associated records from an
ActiveRecord::Relation
, we would use preload
and collect
.
For example, we want to fetch subscriptions
of some users
. The query would
look as shown below.
User.where(blocked: false).preload(:subscriptions).collect(&:subscriptions)
=> # returns collection of subscription records
ActiveRecord::Relation#extract_associated provides a shorthand to achieve same result and is more readable than former.
User.where(blocked: false).extract_associated(:subscriptions)
=> # returns the same collection of subscription records
Here's the relevant pull request for this change.
If this blog was helpful, check out our full blog archive.