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 by を実行する方法だと思いますが、1 行 (group by の期待される結果) が返されます。これまで group_concat を使用したことがありませんが、このような状況で役立ちますか? ありがとう!

4

3 に答える 3

2

ねえ、あなたはこのように使うことができます

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

デモ

于 2013-07-23T07:17:39.863 に答える
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 に答える
0

はい、役に立ちます。

これを参照

GROUP_CONCAT(columnName SEPARATOR ' AND ')

于 2013-07-23T06:54:01.527 に答える