如何通过电子邮件进行分组并同时从表中获取所有列?

时间:2018-07-11 16:58:38

标签: ruby-on-rails postgresql ruby-on-rails-5

这个想法是,当用户要求将图像发送到邮件时,我需要保存他的电子邮件。

电子邮件不是唯一的

因此,用户可以向其邮箱发送10张图像。

我需要显示什么图像以及用户发送该图像的电子邮件。 也就是说,我需要获取发送的邮件总数。 以及已经发送给特定电子邮件的信件数。

我在视图中有一张桌子。

image           email           total
image_id        blah@mail.com (3)
image_id        blah2@mail.ru (2)

我使用此代码

photo_booth.send_images.includes(:image).select('distinct on (email) *')

但是我收到了很多独特的电子邮件。

如何通过电子邮件进行分组并同时从表中获取所有列?

t.string "email"
t.bigint "image_id", null: false
t.bigint "photo_booth_id", null: false

1 个答案:

答案 0 :(得分:0)

对于初学者来说,由于您没有提及模型名称,因此我假设您的模型名称为EmailImage,好吗?反正...

您可以尝试group_by方法。像这样:

photo_booth.send_images.group_by {|res| res.email} 

将给您类似的结果

{"blah@mail.com" => [#<EmailImage id: 1, email: "blah@mail.com", image_id: 1>, #<EmailImage id: 2, email: "blah@mail.com", image_id: 2>]}

,依此类推。请注意,EmailImage对象的数组大小是重复发送电子邮件的总数,因此您可以在视图中使用该图像以及image_id(直接从数组本身中的对象获取)以及所需的其他任何内容。希望能帮助到你! =)