Have you ever needed to get the most recent record for each user in #rails, but didn't know how to do it without using map?
Here's one way to do it with Active Record 👇
Calling group(:user_id).minimum(:id) returns a hash where the key is the user_id and the value is the ID of their latest (or first) post. Calling .values simply returns the IDs.
We can then pass that list to where(id:) to return a list of the latest (or first) posts per user.
Since the IDs are set in sequential order, the minimum ID is the ID of the user's first post, and the maximum ID is the ID of the user's latest post.
This could also be achieved with the created_at column instead of the ID column, since a higher ID doesn't always mean that the record is the latest.
This is especially true is a user is able to control when a post is created or published.
I've received a lot of thoughtful feedback on this!
Although one of the most performant solutions is to use raw SQL in a `select` call, I wanted to see if this could be achieved with Active Record only.
Here's an optimization that prevents a large hash from being returned.
• • •
Missing some Tweet in this thread? You can try to
force a refresh