Rails 7 adds Enumerable#maximum and Enumerable#minimum methods to easily calculate the maximum or minimum from extracted elements. These methods have existed in ActiveRecord for some time now and is useful when you have a collection of records.
But in scenarios were you deal with a mix of collections and other enumerables, you might have had to use a mixture of
map(:value).max or a custom inject/reduce implementation.
For example, given a model called Movie with an attribute rating.
# app/models/movie.rb class Movie < ApplicationRecord attr_reader :rating end
If we wanted to get the maximum or minimum rating for an array of movies, we would previously have had to resort to something like this
movies = [ Movie.new(rating: 1), Movie.new(rating: 5), Movie.new(rating: 9), ] movies.pluck(:rating).min # => 1 movies.pluck(:rating).max # => 9
But with this update coming in Rails 7, we could achieve the same thing the same way we would have used on a collection instance.
So from the above example,
movies = [ Movie.new(rating: 1), Movie.new(rating: 5), Movie.new(rating: 9), ] movies.minimum(:rating) # => 1 movies.maximum(:rating) # => 9 # Just like an ActiveRecord scope Movie.where(genre: :scifi).maximum(:rating)
Thank you for reading and Happy Coding!