【发布时间】:2019-10-13 02:55:00
【问题描述】:
我有一个模型ConnectedUser,它属于另外两个模型User 和Station。
这是一个只有这些关系和布尔值active 的简单模型。
我要查询的结果将只是每个User 的每个最近的ConnectedUser 记录(其中Station 是一个特定的ID)。
例如,如果我的ConnectedUser 表看起来像这样......
+----+---------+------------+--------+------------+
| id | user_id | station_id | active | created_at |
+----+---------+------------+--------+------------+
| 1 | 1 | 1 | true | 20 June |
| 2 | 1 | 1 | false | 19 June |
| 3 | 1 | 2 | false | 20 June |
| 4 | 2 | 1 | false | 18 June |
| 5 | 2 | 1 | false | 21 June |
+----+---------+------------+--------+------------+
而车站是 id 为 1 的车站,那么我希望查询返回...
[
<ConnectedUser id: 1, user_id: 1, station_id: 1, active: true, created_at: "2019-06-20">,
<ConnectedUser id: 5, user_id: 2, station_id: 1, active: false, created_at: "2019-06-21">
]
为了实现这一点,我一直在尝试使用group 和order
ConnectedUser.where(station: station).select(:user_id).group(:user_id).order(:created_at)
但不断收到这样的错误:
ActiveRecord::StatementInvalid (PG::GroupingError: ERROR: column “connected_users.created_at”必须出现在 GROUP BY 子句中或 用于聚合函数)
我无法获得特定的ConnectedUser id,所以感觉我缺少一些重要的了解如何使用group 并汇总结果。
这可以在一个 ActiveRecord 查询中实现吗?
非常感谢。
【问题讨论】:
-
抱歉,它不应该改变,我已经编辑修复它。
标签: ruby-on-rails postgresql activerecord