Ruby on Rails中的活动记录分组

时间:2015-04-06 18:20:06

标签: ruby-on-rails ruby

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'> ]>

如何基于ruby中的store_id以逗号分隔的形式对位置进行分组,以获得结果,

store-id(3)的位置应该用逗号表示为(yyy,xxx),

那么store-id(4)的位置应该用逗号表示为(zzz,aaa)

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

1 个答案:

答案 0 :(得分:0)

使用Enumerable.group_by可以这样做:

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

如果要在数据库级别进行分组,使用ActiveRecord中的group方法,则需要在数据库上有一个负责连接的函数,因此解决方案将取决于所使用的数据库。 / p>

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

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