September 18, 2019
This blog is part of our Rails 6 series.
Rails 6 added ActionDispatch::Request::Session#dig.
This works the same way as Hash#dig (Link is not available).
It extracts the nested value specified by the sequence of keys.
Hash#dig (Link is not available) 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 (Link is not available) on it.
Let's checkout how it works.
Let's add some user information in session and use dig after converting it to a hash.
>> session[:user] = { email: '[email protected]', name: { first: 'Jon', last: 'Snow' } }
=> {:email=>"[email protected]", :name=>{:first=>"Jon", :last=>"Snow"}}
>> session.to_hash
=> {"session_id"=>"5fe8cc73c822361e53e2b161dcd20e47", "_csrf_token"=>"gyFd5nEEkFvWTnl6XeVbJ7qehgL923hJt8PyHVCH/DA=", "return_to"=>"http://localhost:3000", "user"=>{:email=>"[email protected]", :name=>{:first=>"Jon", :last=>"Snow"}}}
>> session.to_hash.dig("user", :name, :first)
=> "Jon"
Let's add the same information to session and now use dig
on session object
without converting it to a hash.
>> session[:user] = { email: '[email protected]', name: { first: 'Jon', last: 'Snow' } }
=> {:email=>"[email protected]", :name=>{:first=>"Jon", :last=>"Snow"}}
>> session.dig(:user, :name, :first)
=> "Jon"
Here is the relevant pull request.
If this blog was helpful, check out our full blog archive.