我有一个模型,它将键值对存储为另一个模型人的属性。
将person.person_attributes转换为哈希的简单方法是什么?
这是我提出的一种愚蠢的方式:
keys = person.person_attributes.map(&:key)
values = person.person_attributes.map(&:value)
hashed_attributes = Hash.new
keys.each_index do |i|
hashes_attribues[keys[i]] = values[i]
end
这是一种更优雅的方法吗?
提前谢谢你,
答案 0 :(得分:4)
我喜欢Enumerable#each_with_object
这类事情
attributes = person.person_attributes.each_with_object({}) do |attribute, hash|
hash[attribute.key] = attribute.value
end
如果您仍然使用Ruby 1.8.7,请不要担心,Rails has backported this method。
答案 1 :(得分:1)
您希望将每个具有key
和value
属性的对象数组转换为散列,其中key
映射到value
?
您可以使用以下内容,使用Hash[array]
将二维数组转换为哈希:
Hash[person.person_attributes.map { |e| [e.key, e.value] }]
Obj = Struct.new(:key, :value)
[ { Obj.new(:key1, :value1) },
{ Obj.new(:key2, :value2) },
{ Obj.new(:key3, :value3) }
]
{ :key1 => :value1, :key2 => :value2, :key3 => :value3 }