2013-10-10 146 views
1

我有一个notifications表,我根据他们选择的频率向人们发送报告。如何根据多个字段对行进行分组?

如果一个电子邮件地址存在多个questions并具有相同的frequency ...那么我需要将它们组合在一起,这样我就可以发送一个报告来解决这两个问题。

[ 
    #<Notification id: 1, question_id: 58, email: "[email protected]", frequency: "daily">, 
    #<Notification id: 2, question_id: 25, email: "[email protected]", frequency: "daily">, 
    #<Notification id: 3, question_id: 47, email: "[email protected]", frequency: "monthly">, 
    #<Notification id: 3, question_id: 19, email: "[email protected]", frequency: "monthly"> 
] 

所以在我的示例数据,3份报告将发送:

我可能无法解释这个非常好,所以让我知道是否需要澄清。

+0

'notification'如何适合您的其他模型? – dax

+0

问题has_many通知和通知belongs_to问题 – Shpigford

回答

1

您可以用常规GROUP_BY实现这一目标:

@notifications = your_method_to_retrieve_notifications 
@notifications = @noticications.group_by do |notif| 
    notif.ferquency + ':' + notif.email 
end 

这会将您的通知是这样的:

@notifications = { 
    'daily:[email protected]' => [<Notification id: 1>, #etc.], 
    'monthly:[email protected]' => [# list of notifications], 
    'monthly:[email protected]' => [# list of notif] 
} 

如果只想通过分组通知列表中的数组频率&电子邮件,使用上面的方法,并添加此:

@notifications = your_method_to_retrieve_notifications 
@notifications = @noticications.group_by do |notif| 
    notif.ferquency + ':' + notif.email 
end.values 
# returns Array of arrays like: 
[ 
    [<Notification id: 1 frequency: "daily", email "[email protected]">,<Notification id: 2 frequency: "daily", email "[email protected]">], 
    [<Notification id: 3 frequency: "daily", email "[email protected]">], 
    [<Notification id: 4 frequency: "monthly", email "[email protected]">,<Notification id: 5 frequency: "monthly", email "[email protected]">], 
] 
相关问题