2010-10-04 3 views
4

Supposons que les envois sont envoyés pour être traités ultérieurement (c'est-à-dire via starling ou delayed_job).Rails: Vaut-il mieux envoyer des notifications par e-mail à partir d'un modèle ou d'un contrôleur?

Ce que je veux savoir est-il une meilleure pratique pour envoyer des notifications par courriel de ActiveController s ou ActiveRecord s? Je pense qu'il est utile de le mettre dans le contrôleur, car vous voudrez peut-être contrôler si un email devrait être envoyé ou non (c'est-à-dire après qu'un modèle enregistre d'autres critères pourrait être important) mais l'idée qu'il y a UN endroit (le modèle) que l'e-mail est envoyé à partir de si elle est traitée à partir du modèle après une sauvegarde (créer ou mettre à jour, etc) est également utile.

Est-ce que quelqu'un d'entre vous a eu ce dilemme? Lequel avez-vous choisi et pourquoi? Avez-vous fait quelque chose de complètement différent?

Répondre

9

Personnellement, j'aime que tout soit regroupé dans ActiveRecord. Cependant, pour envoyer un email spécifiquement, je le fais toujours depuis le contrôleur. Imaginez simplement que vous exécutez des tests unitaires ou que vous modifiez un enregistrement à partir de la console. Ce sont deux situations auxquelles je me heurte où je ne veux pas que des courriels soient envoyés.

1

IMHO, rails est une structure flexible et, quelle que soit la manière dont vous commencez, vous pouvez toujours passer du modèle au contrôleur et vice-versa avec un effort presque nul. En d'autres termes, ce n'est pas un problème qui vaut la peine de passer 2 heures.

Mais l'important est que vous ayez tous du code en un seul endroit (généralement dans une sous-classe de ActionMailer::Base). De cette façon, changer de lieu d'envoi de courrier électronique consiste simplement à déplacer une ligne de code.

Questions connexes