尝试使用where语句分组但收到错误

时间:2014-12-24 07:29:42

标签: ruby-on-rails rails-activerecord

我有一个联盟表,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。所有整数。

2 个答案:

答案 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) }