我有一个联盟表,UserClub。其中包括club_ids和user_ids。
我的目标是做一些事情:
UserClub.where(club_id: club_ids).group(:user_id)
#=> { 3 => [1,5,10], 11 => [1, 12, 41], ... }
其中键是user_id,值是club_ids的数组。
尽管如此,最终这只是实现将该哈希值(user_ids)中的键分组为具有相同值的键的最终目标的一步。
所以,我们假设上面的查询生成了{ 3 => [1, 5], 11 => [12, 15, 19], 4 => [1, 5], 51 => [12, 13, 14] }
最终目标是:{ [1, 5] => [3, 4], [12, 15, 19] => [11], [12, 13, 14] => [51]}
。
尽管如此,如果某人提供了一个带有ActiveRecord查询的解决方案来生成最终目标,那将是很好的,但真正的问题是我的查询会抛出错误。我不知道我是否错了。如果是这样,构建该查询的适当方法是什么?
错误:
PG::GroupingError: ERROR: column "user_clubs.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "user_clubs".* FROM "user_clubs" WHERE "user_c...
Schema是您通常的联接表。 id,club_id和user_id。所有整数。
答案 0 :(得分:0)
您可以通过
获得预期的结果UserClub.where(club_id: club_ids).group_by{|record| record[:user_id]}
只获得club_ids
UserClub.where(club_id: club_ids).group_by{|record| record[:user_id]}.each{|k, v| v.map!{|val| val.club_id}}
答案 1 :(得分:0)
如果您确实需要特定分组,请使用纯ruby
,因此我认为应将其分组如下:
Club.where(id: club_ids).group_by {|c| c.users.map(&:id) }