gpt4 book ai didi

ruby-on-rails - 如何根据多个字段对行进行分组?

转载 作者:行者123 更新时间:2023-11-29 13:33:05 24 4
gpt4 key购买 nike

我有一个通知表,我根据人们选择的频率通过电子邮件将报告发送给他们。

如果一个电子邮件地址存在于多个问题 中并且具有相同的频率...那么我需要将它们组合在一起,这样我就可以针对这两个问题发送一份报告。

[
#<Notification id: 1, question_id: 58, email: "john@example.com", frequency: "daily">,
#<Notification id: 2, question_id: 25, email: "john@example.com", frequency: "daily">,
#<Notification id: 3, question_id: 47, email: "john@example.com", frequency: "monthly">,
#<Notification id: 3, question_id: 19, email: "frank@example.org", frequency: "monthly">
]

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

  • 每天 1 到 john@example.com 回答问题 58 和 25
  • 每月向 john@example.com 发送第 47 个问题
  • 每月向 frank@example.org 发送第 19 个问题

我可能没有很好地解释这一点,所以如果有什么需要澄清的,请告诉我。

最佳答案

您可以通过常规 group_by 实现此目的:

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

这会将您的通知分组如下:

@notifications = {
'daily:john@example.com' => [<Notification id: 1>, #etc.],
'monthly:john@example.com' => [# list of notifications],
'monthly:frank@example.org' => [# 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 "a@b.com">,<Notification id: 2 frequency: "daily", email "a@b.com">],
[<Notification id: 3 frequency: "daily", email "xx@yy.com">],
[<Notification id: 4 frequency: "monthly", email "a@b.com">,<Notification id: 5 frequency: "monthly", email "a@b.com">],
]

关于ruby-on-rails - 如何根据多个字段对行进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com