Fondamentalement, je veux créer une notification comme Facebook et Stackoverflow. Plus précisément, dans un système de post-commentaires, lorsqu'un post est commenté, toutes les personnes impliquées (les personnes qui créent le post et qui créent des commentaires, à l'exception du nouveau commentateur) reçoivent un message de notification indiquant que ce post est commenté. Et la notification est rejetée lorsque les gens l'ont lue.
J'ai essayé d'utiliser boîte aux lettres gem pour l'implémenter, mais malheureusement, aucun exemple n'est disponible en utilisant ses méthodes connexes, y compris social_stream lui-même.
Existe-t-il un autre moyen de créer le système de notification?
Et lorsque j'essaie de le créer à partir de zéro, j'ai plusieurs problèmes:
Model Notification
topic_id: integer
user_id: integer
checked: boolean #so we can tell whether the notification is read or not
Je pense que nous devons juste transformer l'attribut "vérifié" de chaque message de notification en vrai après que l'utilisateur a visité l'index de notification. (Dans NotificationsController)
def index
@notifications=current_user.notication.all
@notification.each do |notification|
notification.checked = true
end
@notification.save!
end
2.Sélectionner les utilisateurs à notifier (et exclure l'utilisateur qui fait un nouveau commentaire)
Je n'ai juste aucune idée dans la rédaction de requêtes ....
3.Création de notifications
Je pense que cela devrait être quelque chose comme
#in CommentController
def create
#after creating comments, creat notifications
@users.each do |user|
Notification.create(topic_id:@topic, user_id: user.id)
end
end
Mais je pense que c'est vraiment moche
Il n'est pas nécessaire de répondre aux 3 problèmes ci-dessus, toute solution simple au système de notification est préférable, merci ....
Je pense que vous êtes sur la bonne voie.
Un index des notifications légèrement meilleur
def index
@notifications = current_user.notications
@notifications.update_all checked: true
end
Avertissez cet utilisateur
User.uniq.joins(:comments).where(comments: {id: @comment.post.comment_ids}).reject {|user| user == current_user }
Les utilisateurs uniques qui ont participé aux commentaires du post @ comment, rejettent (suppriment du résultat) current_user.
il y a un joyau incroyable appelé activité publique, vous pouvez le personnaliser comme vous le souhaitez et voici un screencast à ce sujet dans railscast http://railscasts.com/episodes/406-public-activity espérons que pourrait vous aider.
Dans mon Rails, j'ai créé un système de notifications similaire au vôtre pour envoyer des notifications à tous les utilisateurs, mais en action d'indexation, vous pouvez utiliser
current_user.notifications.update_all(:checked=>true)
et aussi pour envoyer une seule notification à l'utilisateur une fois pas plusieurs fois que quelqu'un a commenté le message, vous pouvez utiliser la méthode unique_by
@comments [email protected]_by {|a| a[:user_id]}
alors vous pouvez envoyer des notifications uniquement aux utilisateurs des commentaires précédents
@comments.each do |comment|
comment.user.notifications.create!(....
end
j'espère que cela pourrait vous aider