arr = [{ "email"=>"user_name@aaa.com", "expression"=>"aaa", "name"=>"bbb",
"roles"=>[:admin] },
{ "email"=>"user_name@aaa.com", "expression"=>"aaa", "name"=>"bbb",
"roles"=>[:manager] }]
arr.first.merge("roles"=>arr.map { |h| h["roles"].first })
#=> {"email"=>"user_name@aaa.com", "expression"=>"aaa", "name"=>"bbb",
# "roles"=>[:admin, :manager]}
Шаги следующие:
h = arr.first
#=> {"email"=>"user_name@aaa.com", "expression"=>"aaa", "name"=>"bbb",
# "roles"=>[:admin]}
a = arr.map { |h| h["roles"].first }
#=> [:admin, :manager]
g = { "roles"=>a }
#=> {"roles"=>[:admin, :manager]}
h.merge(g)
#=> {"email"=>"user_name@aaa.com", "expression"=>"aaa", "name"=>"bbb",
# "roles"=>[:admin, :manager]}
Обратите внимание, что Ruby разрешает записывать хэш в качестве аргумента метода в виде последовательности его пар ключ-значение.Например:
receiver.doit({ a: 1, b: 2})
можно записать
receiver.doit(a: 1, b: 2)