2015-04-06 122 views
2
record = #<ActiveRecord::AssociationRelation 
[#<User id: 2, store_id: 3,location: 'xxx'>, 
#<User id: 4, store_id: 3,location:'yyy'>, 
#<User id: 5, store_id: 4,location:'zzz'>, 
#<User id: 6, store_id: 4,location:'aaa'> ]> 

如何组位置以逗号分隔的形式基础上红宝石STORE_ID得到的结果,活动记录分组在Ruby on Rails的

商店中的ID(3)的位置应与逗号combained如(YYY,XXX),

然后商店中的ID(4)的位置应与逗号combained为(ZZZ,AAA)

#< store_id: 3,location:'yyy,xxx'> 
#< store_id: 4,location:'zzz,aaa'> 
+1

要组究竟如何?通过'store_id',通过'location'或者两者兼而有之?你的问题并不清楚。 –

+0

你实际上是要求一个'sort'而不是'group'吗?从你提供的小信息看,你想要一个排序。 – Beartech

+0

我需要由store_id分组 – Dheena

回答

0

使用Enumerable.group_by你可以这样来做:

User.all.group_by(&:store_id).map{|store_id,records| {store_id: store_id, location: records.map(&:location).join(',')}}

如果你想要做的数据库级别的分组,利用ActiveRecord的该组方法,它需要有一个需要拼接的照顾数据库的功能,因此该解决方案将取决于正在使用数据库。

例如,在MySQL(见Can I concatenate multiple MySQL rows into one field?

User.group("store_id").select("store_id, GROUP_CONCAT(location SEPARATOR ',') as location")