基于公共属性(rails)的pluck

时间:2017-07-17 12:33:19

标签: mysql ruby-on-rails

我有一张关注表,其中每条记录都有user_idfollower_id属性。

我可以这样做:

Followership.limit(10).pluck('user_id, follower_id)

但这会给我这样的结果[[1,A][2,B],[3,C],[4,A],[1,B][2,D]]

我想转换上面的数组,以便所有具有相同user_ids的数组都应合并为以下格式[user_id, FOLLOWER_ID(S)]

即;

[[1,[A,B]][2,[B,D]],[3,C],[4,A]]

此处user_id = 1有两位关注者A,Buser_id = 2有两位关注者B,D

怎么做?

2 个答案:

答案 0 :(得分:3)

作为pointed out by Sergio,您可以将group_bypluck之后使用的数组一起使用,例如:

arr = [[1,'A'],[2,'B'],[3,'C'],[4,'A'],[1,'B'],[2,'D']]

a.group_by(&:first).map { |k, v| [k, v.map(&:last)] }
#=> [[1, ["A", "B"]], [2, ["B", "D"]], [3, ["C"]], [4, ["A"]]]

答案 1 :(得分:0)

另一种方法

a = [[1,'A'],[2,'B'],[3,'C'],[4,'A'],[1,'B'][2,'D']]
h = Hash.new { |h, k| h[k] = [] }
a.inject(h) { |sum, t| sum[t[0]] << t[1]; sum}.to_a