J'ai des objets qui ont des commentaires. Dans le cadre d'un récapitulatif périodique de l'e-mail, je souhaite déterminer les commentaires pour une période et présenter les objets dans l'ordre de l'objet commenté le plus ancien en premier.regrouper les commentaires par objet parent, en ordonnant l'objet parent par le commentaire le plus ancien
données:
object_id comment_id
30 40
40 42
32 41
30 43
32 44
Sortie:
Objet # 30
- commentaire 40
- commentaire 43
Object # 40
- commentaire 42
Objet # 32
- commentaire 41
- commentaire 44
J'utilise ce code pour obtenir les données d'un tableau intermédiaire - j'ai essayé de tout obtenir en un seul coup en utilisant .group_by (&: commentable_id) mais les données ne sont pas sorties dans le bon ordre.
comments = account.comments.all(
:conditions => ["comments.created_at > ?", 8.hours.ago],
:order => "comments.created_at asc").map { |c| [c.commentable_id,c.id] }
=> [ [30,40], [40,42], [32,41], [30,43], [32,44] ]
Si je peux obtenir ces données pour se transformer en la forme suivante, je pouvais itérer sur le tableau pour construire le contenu e-mail ...
[ [30,[40,43]], [40,[42]], [32,[41,44]] ]
Mais je me demande si je fais C'est plus difficile que ce dont j'ai besoin ... Des conseils?
(j'utilise Rails 2.3 et Ruby ree-1.8.7)
merci pour la pointe ... voici le code que je suis allé avec ... résultat = Comment.all ( : select => 'commentable_id, GROUP_CONCAT (id) comme comment_array', : group => 'commentable_id' ) .map {| c | [c.commentable_id, c.comment_array]} .reverse – ryw