Je passais des heures à ce sujet et je ne peux pas l'obtenir:Emailing Tous les utilisateurs qui ont commenté sur un sujet de discussion
Ce que je suis en train de faire est; envoyer un courriel à tous les utilisateurs qui ont fait un commentaire sur un forum de discussion chaque fois qu'un nouveau commentaire est posté.
J'utilise user_mailer.rb
def new_post_from_buyer(post)
@post = post
users = User.all.posts.where(:project_id => post.project.id)
mail(:to => '[email protected]',
:bcc => #Somehow turn the users variable i just named into an array of their emails
:subject => 'The Project Poster Posted A New Comment')
end
Je le UserMailer.new_post_from_buyer (@post) .deliver correctement placé dans le posts_controller.rb
Donc il y a quelques choses qui doit arriver que je ne peux pas pour la vie de moi arriver à travailler avec succès.
1 - Je dois obtenir tous les utilisateurs dont les messages correspondent au projet en cours. (pour clarifier, un projet contient un forum de discussion dans lequel tous les messages vont) Le code actuel dans le mailer jette une méthode non définie pour les «messages», et tous les autres moyens que j'ai essayés ne fonctionneront pas.
2 - Je dois alors prendre les utilisateurs et extraire leurs e-mails (qui est une colonne dans la table des utilisateurs)
3 - Je dois alors être en mesure de prendre tous leurs e-mails et la transformer en un tableau séparés par des virgules donc je peux le jeter dans le: bcc du user_mailer.rb.
Comment voulez-vous que cela fonctionne? Une nouvelle façon avec .map ou une méthode dont je n'ai aucune idée, en corrigeant le code dont je pense avoir besoin?
Je cours Rails 3.1.
Pour être plus précis:
- Messages has_many utilisateur.
- Projet has_many Posts.
- L'article appartient à l'utilisateur.
- L'article appartient à Project.
Merci .. J'ai assumé le | pos | pos.user.email était supposé inclure le 't'. Votre solution a fonctionné! Merci .. Curieux; quand il a fait un tableau, a-t-il divisé chaque email avec une virgule? –
@JamesF - Cela pourrait inclure le 't' mais ce n'est pas obligatoire. J'ai volontairement omis le 't' dans ce cas parce que l'argument pour la méthode est nommé 'post', et même si je ne pense pas qu'il y aurait dans la méthode' map' (puisque c'est dans son propre bloc) , Je ne voulais pas risquer de collision avec un nom de variable. Vous pouvez changer cela pour quelque chose comme '| a_post |' ou même 'post' comme vous avez suggéré d'être plus clair, je veux juste m'assurer que j'utilise des noms de variables différents pour éviter la collision de noms et pour la clarté. – Batkins
Aussi, je recommanderais d'expérimenter avec la méthode 'map' de Ruby jusqu'à ce que vous ayez compris, c'est incroyablement utile, et vous aidera aussi à comprendre comment ruby diverses méthodes ruby fonctionnent avec des instructions' block'. [Voici un lien vers les documents pour la méthode 'map'] (http://ruby-doc.org/core-1.9.3/Array.html#method-i-map). – Batkins