10
votes

Modèle de l'utilisateur dans les rails 3

J'ai construit le modèle suivant pour gérer le message de message de l'utilisateur:

 has_many :sent_messages, :class_name=> 'Message', :foreign_key=>'source_id', :dependent=>:destroy
  has_many :recieved_messages, :class_name=> 'Message', :foreign_key=>'destination_id', :dependent=>:destroy


0 commentaires

3 Réponses :


2
votes

Vous pouvez ajouter deux booléens pour marquer le message comme supprimé pour l'expéditeur et le récepteur. Ensuite, après avoir défini l'une d'entre elles, vérifiez si le message peut être supprimé de manière permanente.

Exemple: P>

class Message
  def self.delete_message(id)
    m = Message.find(id)
    m.destroy if m.sender_deleted && m.receiver_deleted
  end
end


2 commentaires

Ne pensez-vous pas que c'est juste une solution de contournement pour ajuster un mauvais modèle? Beaucoup de doutes montrent mon modèle en ce moment ... Par exemple, je dois ajouter 2 autres booléens pour voir si les utilisateurs (expéditeur et récepteur) avaient déjà lu le message ....


@Joe, vous avez besoin de la condition quelque part. Vous avez besoin de 4 états (pour A et B, pour A, pour B, pour aucun), vous avez donc besoin d'au moins 3 états puis sur "Supprimer". Deux booléens sont le moins que vous aurez besoin, que ce soit dans cette solution ou une autre.



2
votes

Vous pouvez annuler sur un enregistrement supprimé avec : dépendant =>: NULLIFY xxx

vous devez gérer lors de l'affichage du message que l'expéditeur / récepteur du message a été supprimé, car l'expéditeur_id ou la destination_id sera null, mais le message restera intact.


9 commentaires

Ainsi, lorsque l'expéditeur ou le récepteur supprime le message, l'autre ne sait plus qui a reçu / l'a envoyé? Cela ne semble guère approprié.


@Aneves alors vous ne voulez pas vraiment supprimer les utilisateurs. Vous voulez les supprimer doucement.


@Jesse Wolgamott Ne me trompe pas, mais je ne veux rien. Oui, mon point était que la suppression de la connexion à l'utilisateur supprime le message de la liste des messages de l'utilisateur, mais il a également supprimé l'utilisateur de faire partie de la conversation - qui ruine honnêtement le message pour l'autre utilisateur.


Qu'en est-il de la fabrication de 2 modèles? Je suis Talking sur le message et le message_copy, le message sera le message avec le texte du corps, le sujet, l'expéditeur et le récepteur_id et la copie du message seront les 2 copies livrées à l'expéditeur et au récepteur. De cette manière, ils auront des copies indomptenaires et effectueront toutes les actions qu'ils souhaitent sans affecter l'autre côté. Toute suggestion sur la manière de mettre en œuvre cette Tecnique si elle est intelligente? J'ai trouvé ce tutoriel qui utilise cette méthode ... Comment le juge-tu?


Dans votre message, vous pouvez stocker toutes les informations pertinentes dont vous avez besoin pour persister la suppression post-suppression. Nom de l'auteur, image, peu importe. Ce seront des données en double, mais ce sera là pour toujours.


J'ai googlé pendant des jours le message_copy est la seule variante que j'ai trouvée ... Est-ce que votre suggère de garder mon approche et d'ajouter Boolean ou toute autre valeur dont j'ai besoin directement au modèle que j'ai pensé au début sur le fil?


J'aime l'idée de stocker un message sur chaque utilisateur. Comme Email - i En tant qu'élateur, j'en ai une copie du message, et vous, en tant que récepteur, avez votre propre message. Stockez ce qui est nécessaire sur chaque message, avec un identifiant pour aller obtenir plus d'informations si nécessaire (et disponible).


C'est ma même raison ... logiquement doit être séparé, chaque utilisateur peut faire ce qu'il veut avec sa propre copie. Ceci est définitivement la meilleure approche, je suivrai ceci à l'aide du tutoriel Novawave.net/public/Rails_Messaging_Tutorial. HTML l'ajustant à mon cas. Résolu, merci pour les suggestions


Une chose m'inquiète de ce tutoriel ... il utilise un message (qui stocke Author_id, etc., etc. et Message_Copy chacun d'entre eux à un destinataire). Et si l'auteur détruit le message envoyé (donc il supprimer le message)? À ce moment-là, l'association Message_Copy est détruite. Donc, l'auteur ne peut pas détruire ses messages envoyés ... mauvaise chose



7
votes

C'est un bon problème! Je modéliserais cela pour comparer aussi près que possible du modèle de messagerie. Donc, un message appartient toujours à un seul utilisateur, et il a été envoyé ou reçu.

en bref: xxx

et le modèle voudrait: < Pré> xxx

et dans l'utilisateur: xxx

Vous seriez alors simplement capable d'interroger tous les messages envoyés par xxx

et les messages reçus xxx

envoyer un message est un peu plus compliqué alors: xxx < p> ou quelque chose selon ces lignes: vous copiez le message et joignez-le à tous les destinataires, puis effectuez le message d'origine du message envoyé.

De cette façon, chaque utilisateur a une commande totale sur le message.

Améliorations possibles:

  • Gardez également une référence explicite à l'expéditeur et à l'expéditeur (s) dans le message, pour pouvoir autoriser les réponses et les choses
  • au lieu de travailler avec un seul booléen, permettez peut-être de travailler avec des dossiers?

    J'espère que cela aide.


1 commentaires

Superbes! Pour rails 3+, vous voudrez utiliser Self.dup bien que