我有适用于单个实例的代码,但我使用的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哈希封送给该类:
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)
}
我不确定为什么您发现映射数组比较笨拙,但是您可能会将Brewery
设为工厂。
class Brewery
...
def self.many(brewery_list)
JSON.parse(brewery_list).
map(&:to_json).
map(&Brewery.new.method(:from_json)
end
end
并像这样使用它
breweries = Brewery.many(brewery_list)