BigBinary Blog

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

Rails 6 adds ActionDispatch::Request::Session#dig

This blog is part of our Rails 6 series.

Rails 6.0 was recently released.

Rails 6 added ActionDispatch::Request::Session#dig.

This works the same way as Hash#dig.

It extracts the nested value specified by the sequence of keys.

Hash#dig was introduced in Ruby 2.3.

Before Rails 6, we can achieve the same thing by first converting session to a hash and then calling Hash#dig on it.

Let's checkout how it works.

Rails 5.2

Let's add some user information in session and use dig after converting it to a hash.

1>> session[:user] = { email: 'jon@bigbinary.com', name: { first: 'Jon', last: 'Snow' }  }
2
3=> {:email=>"jon@bigbinary.com", :name=>{:first=>"Jon", :last=>"Snow"}}
4
5>> session.to_hash
6
7=> {"session_id"=>"5fe8cc73c822361e53e2b161dcd20e47", "_csrf_token"=>"gyFd5nEEkFvWTnl6XeVbJ7qehgL923hJt8PyHVCH/DA=", "return_to"=>"http://localhost:3000", "user"=>{:email=>"jon@bigbinary.com", :name=>{:first=>"Jon", :last=>"Snow"}}}
8
9
10>> session.to_hash.dig("user", :name, :first)
11
12=> "Jon"

Rails 6.0.0.rc1

Let's add the same information to session and now use dig on session object without converting it to a hash.

1>> session[:user] = { email: 'jon@bigbinary.com', name: { first: 'Jon', last: 'Snow' }  }
2
3=> {:email=>"jon@bigbinary.com", :name=>{:first=>"Jon", :last=>"Snow"}}
4
5>> session.dig(:user, :name, :first)
6
7=> "Jon"

Here is the relevant pull request.

Amit Choudhary in Rails 6
September 18, 2019
Share

Subscribe to our newsletter