Ruby映射到带有Hashie :: Mash对象的哈希

时间:2014-08-11 16:00:00

标签: ruby object map hash

我试图通过包含parent_id和self_id的页面来过滤一个包含Hashie :: Mash gem的伪对象的数组(使用Hashie :: Mash gem的伪对象)。在这个函数中,我想创建一个新的哈希,我可以通过父对象索引子对象。

以下是我正在尝试的内容:

(父对象的parent_id等于零。) ('hashies'是一个包含具有page_id属性的Hashie :: Mash对象的数组)

page_hash = Hash[hashies.map { |page|
  if page.parent_id != "0" then [page.id, page] else [page.parent_id, page] end
}]

我想要的输出如下:

page_hash = {
  #<Hashie::Mash id="978835" parent_id="0"> => [
    #<Hashie::Mash id="980705" parent_id="978835">,
    #<Hashie::Mash id="1049260" parent_id="978835">
  ]
} 

但相反,似乎我只是改变了Hashie :: Mash对象本身,并改变了他们的parent_id和id。这是我的实际输出:

page_hash = {
  #<Hashie::Mash id="1049100" parent_id="1044858"> => 
    #<Hashie::Mash id="1049100" parent_id="1044858">
}

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

by_id = hashies.group_by(&:id)
page_hash = hashies.group_by { |page| by_id[page.parent_id] }