如何在Rails中将数组对象转换为哈希表

4
我有一个包含数组对象的哈希表:
{
  false=>[#<Campaign id: 1, name: "campaign 1", active: false>, #<Campaign id: 3, name: "campaign 3", active: false>, #<Campaign id: 4, name: "campaign 4", active: false>], 
  true=>[#<Campaign id: 2, name: "campaign 2", active: true>]
} 

如何将上述哈希表转换为哈希表。
{
  false=>[{id:1, name:"campaign 1"}, {id:3, name: "capaign 3"}, ....],
  true =>[{id:2, name:"campaign 2"}]
}
2个回答

3
hash.each {|k,v| hash[k] = v.map{|e| {id: e[:id], name: e[:name]}}}

如果您可以使用 select_all 方法获取哈希数组,而不是对象数组,那么您就不需要将对象转换为哈希。
ModelName.connection.select_all("select id, name from <table_name>;")
=> [{id:xxx, name: xxx}.......]

0

在您的对象上使用attributes方法

attributes() 公共的

返回一个哈希表,其中包含所有属性及其名称作为键和属性值作为值。

hash = {
  false => [#<Campaign id: 1, name: "campaign 1", active: false>, #<Campaign id: 3, name: "campaign 3", active: false>, #<Campaign id: 4, name: "campaign 4", active: false>], 
  true  => [#<Campaign id: 2, name: "campaign 2", active: true>]
} 

所以这一行代码应该可以解决问题 -

hash.each {|k, v| hash[k] = v.map(&:attributes) }

{
  false => [{"id": 1, "name": "campaign 1", "active": false}, {"id": 3, "name": "campaign 3", "active": false}, {"id": 4, "name": "campaign 4", "active": false}], 
  true  => [{"id": 2, "name": "campaign 2", "active": true}]
}

请添加更多信息。只有代码和“试试这个”答案是不鼓励的,因为它们没有可搜索的内容,也没有解释为什么某人应该“尝试这个”。 - Rick Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接