如何使用ActiverEcord对此ActivereCord关联进行分组,以便我可以清理数据



说我有以下关联:

user.apples

=> {
   id: 1,
   kind: "red delicious",
   rotten: true
   branch: nil
},
{
   id: 2,
   kind: "red delicious",
   rotten: nil
   branch: 5
},
{
   id: 3,
   kind: "granny smith",
   rotten: true
   branch: nil
},
{
   id: 4,
   kind: "granny smith",
   rotten: nil
   branch: 3
},
{
   id: 5,
   kind: "fuji",
   rotten: false
   branch: nil
},
{
   id: 4,
   kind: "fuji",
   rotten: nil
   branch: 1
}

因此,我需要清理一些重复的数据。实际上,每个kind中都应该只有一个苹果,因此我需要将它们分组在一起,以便我可以迭代彼此重复的几个苹果并将它们结合在一起。我希望我的第一步看起来像这样:

{
 "red delicious" => [{
   id: 1,
   kind: "red delicious",
   rotten: true
   branch: nil
},
{
   id: 2,
   kind: "red delicious",
   rotten: nil
   branch: 5
}],
"granny smith" => [
{
   id: 3,
   kind: "granny smith",
   rotten: true
   branch: nil
},
{
   id: 4,
   kind: "granny smith",
   rotten: nil
   branch: 3
}],
etc...
}

有没有办法进行ActivereCord类型查询?我很想在这里尽可能地将工作卸载到数据库中。

您可以使用group_by

user.apples.all.group_by(&:kind)

这将为您提供每个kind作为键的数组,其中包含所有名称等于Hash键的数组值:

{
  "red delicious"=>[
    #<Apple:0x007f9cb1cc0ba0 id: 1, kind: "red delicious", rotten: true, branch: nil>,
    #<Apple:0x007f9cb1cc0038 id: 2, kind: "red delicious", rotten: nil, branch: "5">
  ],
  "granny smith"=>[
    #<Apple:0x007f9cb1cb3888 id: 3, kind: "granny smith", rotten: true, branch: nil>,
    #<Apple:0x007f9cb1cb3428 id: 4, kind: "granny smith", rotten: nil, branch: "3">
  ],
  "fuji"=>[
    #<Apple:0x007f9cb1cb3220  id: 5,  kind: "fuji",  rotten: false,  branch: nil>,
    #<Apple:0x007f9cb1cb2f50  id: 6,  kind: "fuji",  rotten: nil,  branch: "1">
  ]
}

相关内容

最新更新