Вы можете сократить свой путь через Hash
, который возвращается self.some_json_column
*path, target = ['an_array',10,'a_different_array',5,'color']
node = path.reduce(self.some_json_colum, &:[])
node[target] = 'blue' if node
Нет обработки ошибок, если какая-либо часть пути неверна
Вы также можете посмотреть dig
в зависимости от версии ruby, например,
node = self.some_json_column.dig(*path)
node[target] = 'blue' if node
Это вернет nil
, если какая-либо часть пути не совпадает
Пример:
h = {
'an_array' => [0,1,2,3,4,5,6,7,8,9,
{'a_different_array' => [1,2,3,4,5, {'color' => 'orange'}]}
]
}
*path,target = ['an_array',10,'a_different_array',5,'color']
h.dig(*path)[target] = 'blue'
h
#=> {"an_array"=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
# {"a_different_array"=>[0, 1, 2, 3, 4,
# {"color"=>"blue"}
# ]}
# ]}