Учитывая следующий хеш (не массив, обратите внимание на кавычки, заключающие ключи, как указано).
h = {
id: 2,
Sector: "Crops",
"2011-12": 17.6,
"2012-13": 18.9,
"2013-14": 14.2,
"2014-15": 13.1,
"2015-16": 12.3,
"2016-17": 12.1,
created_at: "2018-08-27T06:11:29.000Z",
updated_at: "2018-08-27T06:11:29.000Z"
}
Это единственный способ получить требуемый результат.
h.delete_if { |k,v| [:id, :Sector, :created_at, :updated_at].include? k }
.each_with_object([]) { |pair, ary| ary << { y: pair.last, label: pair.first } }
# => [{:y=>17.6, :label=>:"2011-12"}, {:y=>18.9, :label=>:"2012-13"}, ... ]
Возможно, вам нужно изменить массив ключей для удаления на ['id', 'Sector', 'created_at', 'updated_at']
Если у вас есть массив хэшей (ваша b
переменная), сопоставьте каждый элемент с предоставленным кодированным кодом:
result = array_of_hashes.map do |h|
h.delete_if { |k,v| [:id, :Sector, :created_at, :updated_at].include? k }
.each_with_object([]) { |pair, ary| ary << { y: pair.last, label: pair.first } }
end
РЕДАКТИРОВАТЬ - Получение правильного массива хэшей из базы данных
Это одно из возможных решений, поскольку имена столбцов не являются стандартными, а возвращаемый объект из базы данных выглядит следующим образом:
#<ActiveRecord::Relation [#<AnnualStateDomesticProduct3 id: 2, Sector: "Crops", 2011-12: 17.6, 2012-13: 18.9, 2013-14: 14.2, 2014-15: 13.1, 2015-16: 12.3, 2016-17: 12.1, created_at: "2018-08-27 06:11:29", updated_at: "2018-08-27 06:11:29">]>
Один из обходных путей - преобразовать в JSON, а затем разобрать в хеш, как уже указывалось в одном комментарии:
b = JSON.parse(AnnualStateDomesticProduct.all.to_json)
Кроме того, чтобы получить значение атрибута от объекта, вы можете «вызвать столбец» следующим образом:
a = AnnualStateDomesticProduct.find(2)
a.send('2011-12') # => 17.6