1

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

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

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

John and katy likes Picture.

代替

John likes Picture
Kay  likes Picture.

我想要走的路是根据trackable_id和trackable_type进行分组,但它返回一行(分组的预期结果)。我以前没有使用过 group_concat,它对这种情况有帮助吗?谢谢!

4

3 回答 3

2

嘿,你可以像这样使用

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

演示

于 2013-07-23T07:17:39.863 回答
0

是的,它有帮助。

参考这个

GROUP_CONCAT(columnName SEPARATOR ' AND ')

于 2013-07-23T06:54:01.527 回答
0

看起来您正在使用多态关联(如果没有 - 那么您应该使用它)。您的方法将如下所示:

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

  "#{user_names} like the Picture"      
end
于 2013-07-23T07:00:36.140 回答