У меня есть код, который работает для одного экземпляра, но API, который я использую, возвращает массив данных. У меня есть класс для инкапсуляции этих данных:
class Brewery
include ActiveModel::Serializers::JSON
attr_accessor :id, :name
def attributes=(hash)
hash.each { |key, value| send("#{key}=", value) }
end
def attributes
instance_values
end
end
И то, как выглядят возвращаемые данные, похоже на это
[
{
"id": 2,
"name": "Avondale Brewing Co"
},
{
"id": 44,
"name": "Trim Tab Brewing"
}
]
Я могу маршалировать один JSON га sh в класс с таким кодом:
brewery = Brewery.new
brewery.from_json(single_brewery)
Однако это не работает с массивом. Я относительно новичок с Ruby, поэтому я не совсем уверен, что это за функция или как минимум завершить хеши JSON в массиве, который можно сопоставить from_json
.
Это работает, но кажется неуклюжим
breweries = JSON.parse(brewery_list).map { |b|
brewery = Brewery.new
brewery.from_json(b.to_json)
}