2009-09-23 8 views
4

J'ai une application est accessible à partir de 2 URL différentes et ressemble/se comporte légèrement différente en fonction de l'URL que vous utilisez pour y accéder. Je suis capable de le faire en stockant une valeur dans l'objet de session et de baser certaines décisions hors de lui comme les vues de chemin à partir desquelles est chargé.Comment accéder à la session depuis une classe ActionMailer?

Ce genre d'approche semblait fonctionner jusqu'à ce que je devais avoir des URL différentes dans les emails. Dans une classe qui hérite de ActionMailer, je dois définir default_url_options [: host] en fonction de la valeur d'une variable de session. Rails jette l'erreur suivante lorsque j'appelle la session de partout dans le logiciel de messagerie:

variable locale non définie ou méthode `session » pour ApplicationMailer: Classe

La manière moins que souhaitable de gérer cela est pour transmettre la variable de session dans mes appels mailer. Je préfère ne pas le faire car il ne semble pas très sec et nécessiterait des changements à une grande partie de mon code.

Répondre

3

Que vous puissiez insérer ou non une référence à la session dans l'expéditeur, je pense que vous avez déjà trouvé la bonne solution. Passer dans le contexte que vous souhaitez utiliser serait préférable pour plusieurs raisons.

  1. L'expéditeur ne devrait probablement pas être au courant de la session en premier lieu.
  2. Supposons qu'un jour vous devez envoyer beaucoup de courrier et le traiter par lots. Vous serez de retour à l'endroit où vous êtes maintenant - devoir passer dans votre contexte.