Je prévois de mettre en œuvre un système de messages privé entre les membres. Je me demande quelles sont les approches préférées à cela.
Les exigences sont p>
Je devrais être capable de les récupérer facilement comme quelque chose comme ça p>
attr_accessible :user_id, :friend_id, :message, :read
belongs_to :user
Lorsque vous appelez @ user.conversations doit récupérer uniquement les personnes qui m'ont envoyé des messages ou des personnes que j'envoie des messages. actuel_user doit être exclu. P> li>
si je suis envoyeur_id = 5 et envoyez to_id = 10 alors, l'autre personne répondrait comme émetteur = 10 to_id = 5. Cela devrait être considéré et compris comme le même objet de conversation. p> li> OL>
En ce qui concerne le dernier point. Je ne sais pas quelle est l'approche préférée de la modélisation. p>
Il est préférable d'utiliser un modèle de conversation pour gérer tous les messages tels que P> ou il est préférable de créer un modèle de conversation pour gérer l'association et un modèle de message Pour les messages. P> J'aimerais voir des cas d'échantillonnage de la manière de mettre en œuvre cette relation et s'il y a une méthode supplémentaire à mettre en œuvre. P> Je suis un peu perdu ici. p> p>
4 Réponses :
Un modèle beaucoup plus simple consiste à capturer chaque message: Si vous devez capturer les threads du message, tout message qui est une réponse peut enregistrer une référence au message initial Démarrer la conversation ( aka thread). Par exemple: p>
@Winfield Comment puis-je obtenir le document root à l'aide de l'in_Reply_to? Je veux avoir quelque chose comme Twitter DM
Les messages racine auront une valeur null in_reply_to.
@Winfield Merci, je l'ai résolu en ajoutant avant_create Filtre, pour ajouter du thread_id comme Message_Id Incase Il n'y a pas de thread_id fourni. Cela renvoie tous les documents, y compris le principal.
Si vous utilisez ce modèle DB:
class User < ActiveRecord::Base
has_many :conversations, :class_name => "UserMessage", :finder_sql =>
'SELECT * ' +
'FROM user_messages' +
'WHERE sender_id = #{id} OR to_id = #{id} '
end
Vous pouvez également utiliser
acts_as_messageable est un peu long dans la dent, mais devrait vous donner quelques idées. P>
Je préférerais cela, autant de plugins / gemmes d'act_as_ *. Et selon les besoins que @Martin mentionné ci-dessus, il correspond à ses besoins.
Étiez-vous, j'aurais allé avec IMAP au lieu d'utiliser la DB pour une telle modélisation. p>
Vérifiez Ce Pour plus de détails. p>