小组活动项目

时间:2013-07-23 06:49:36

标签: mysql sql ruby-on-rails

我有以下用于存储活动项目的表格结构

id, trackable_id, trackable_type, owner_id, owner_type

其中trackable_id和trackable_type告诉我执行操作的对象(实体)。例如,如果id = 1的用户喜欢id = 1的图片

id, trackable_id, trackable_type, owner_id, owner_type

1,       1,            Picture,      1,        User

类似地,另一个用户可以喜欢相同的图片。在我的新闻Feed中,我可以轻松地显示用户执行的活动,但我想实现这样的目标:

John and katy likes Picture.

而不是

John likes Picture
Kay  likes Picture.

我想要的方法是基于trackable_id和trackable_type做一个组,但它返回一行(group by的预期结果)。我之前没有使用过group_concat,它在这种情况下有用吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

嘿,你可以像这样使用

CONCAT(GROUP_CONCAT( user_name SEPARATOR 'AND' ),' LIKES PICTURES')

Demo

答案 1 :(得分:0)

是的,这有帮助。

Refer this

GROUP_CONCAT(columnName SEPARATOR ' AND ')

答案 2 :(得分:0)

看起来你正在使用polymorfic associations(如果没有 - 那么你应该使用它)。 您的方法如下所示:

def liked_by_string
  user_names = users.collect(&:name).to_sentence # => "John, Katty, Mark and Pete"

  "#{user_names} like the Picture"      
end