Rails 7 adds Enumerable#sole

Ashik Salman

By Ashik Salman

on April 27, 2021

This blog is part of our  Rails 7 series.

Rails 7 introduces the Enumerable#sole method, which can be used to find and assert the presence of exactly one element in the enumerable.

The Enumerable#sole method is an add-on for ActiveRecord::FinderMethods#sole and #find_sole_by methods, which were recently added in Rails 6.1. Please check our blog (Link is not available) for more details on it.

1=> list = ["Sole Element"]
2=> list.sole
3=> "Sole Element"
4
5=> hash = { foo: "bar" }
6=> hash.sole
7=> [:foo, "bar"]

The Enumerable#sole method raises Enumerable::SoleItemExpectedError error if the enumerable is empty or contains multiple elements. When the sole element is nil, it will be returned as result.

1=> list = [nil]
2=> list.sole
3=> nil
4
5=> list = []
6=> list.sole
7=> `Enumerable::SoleItemExpectedError (no item found)`
8
9=> list = ["Apple", "Orange"]
10=> list.sole
11=> `Enumerable::SoleItemExpectedError (multiple items found)`

Check out this pull request for more details.

Stay up to date with our blogs. Sign up for our newsletter.

We write about Ruby on Rails, ReactJS, React Native, remote work,open source, engineering & design.