2017-06-24 4 views
0

は、私は、以下の関連を持っていると言う:どのようにグループの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タイプのクエリを行う方法はありますか?私はできるだけデータベースに作業をオフロードしたいと思います。

答えて

1

あなたはgroup_by使用することができます

{ 
    "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"> 
    ] 
} 

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

これは名前はハッシュキーに等しいすべてのりんごを含む配列値を持つキーとしてあなたに各kindの配列を与えるだろう

関連する問題