7
votes

Manière préférée aux messages privés Modélisation dans les rails 3

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>

  1. 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
    
  2. 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>

  3. 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> xxx pré>

    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>


0 commentaires

4 Réponses :


13
votes

Un modèle beaucoup plus simple consiste à capturer chaque message: xxx

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: xxx


3 commentaires

@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.



2
votes

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


1 commentaires

Vous pouvez également utiliser .Column_names ["attr_accessible"]. Nom du nom de la colonne de DB que vous souhaitez et .Table_name Pour éviter les problèmes de dénomination



4
votes

acts_as_messageable est un peu long dans la dent, mais devrait vous donner quelques idées.


1 commentaires

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.



1
votes

Étiez-vous, j'aurais allé avec IMAP au lieu d'utiliser la DB pour une telle modélisation.

Vérifiez Ce Pour plus de détails.


0 commentaires