使用连接、Uniq 和 Group_by_month(:created_at)

Using Joins, Uniq and Group_by_month(:created_at)

你好,我又写下问题了

所以我有 3 个模型 'User' 'Companion' 'Task'

User. has_many: companions, has_many: tasks
Companion: belongs_to: user
Task: belongs_to: user

我需要的数据是用户的月度数据,以及有同伴的用户,最后还有谁订购了任务

所以我试图使用这个代码

User.group_by_month(:created_at).count

直到这里我才能够得到我所想的数据

 User.joins(:companions).uniq.group_by_month(:created_at).count

还有我每月统计的有同伴但根本不起作用的用户数

那我还需要加入一个'Task',看看哪个用户有同伴,还订了一个任务

所以我希望看到的结果是

每月注册用户数

Aug, 2020 = > 300

有同伴的用户

 Aug, 2020 = > 150

有同伴并订购任务的用户

 Aug, 2020 = > 75

我需要唯一编号的用户拥有伙伴,以及拥有伙伴并且还订购了任务的用户

Uniq 适用于数组。对于 collection of records 你可以使用 distinct.

检查:https://apidock.com/rails/v5.2.3/ActiveRecord/QueryMethods/distinct

这意味着您可以使用:

User.joins(:companions).distinct.group_by_month(:created_at).count