Wow, thanks for all the answers!
I am going to summarize the answers - as the answer seems more subtle than just another oneliner; -)
As gertas points out, parameters are always present in the controller action (which really works), and that the nil check is sufficient, my source code can be reduced to:
@var = params[:key1][:key2] unless params[:key1].nil?
It's readable, but not as short as other sentences, for example
params[:key1].nil? || (@var = params[:key1][:key2])
@var = params[:key1] && params[:key1][:key2]
or even
@var = (params[:key1] || {})[:key2]
, rubys try() , hellvinz ( / ):
@var = params[:key1].try(:fetch, :key2, nil)
, , :
@var = params.fetch(:key1, {}).fetch(:key2, nil)
@var = {:key1=>{}}.merge(params)[:key1][:key2]
" ", " ",
!: -)