2013-07-23 5 views
1

I имеет следующую структуру таблицы для хранения элементов деятельностиэлементов деятельности группы

id, trackable_id, trackable_type, owner_id, owner_type 

где trackable_id и trackable_type говорят мне о том, что объект (лицах) действие выполняется на. Например, если пользователь с идентификатором = 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, не помогает ли это в такой ситуации? Спасибо!

ответ

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 
2

Эй вы можете использовать Как это

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

Demo

Смежные вопросы