2017-04-25 2 views
6

J'ai fond des rails et je travaille à mettre en œuvre quelque chose comme comme indiqué dans l'image enter image description herecontenu dynamique dans les modèles de courrier électronique

Mon modèle de courrier électronique aura ces tags. Tout en envoyant l'email au client, ses informations seront remplies dans le modèle. J'ai trouvé ce lien here mais il n'y a pas de réponse. J'ai levé les yeux et trouvé this gem, mais je ne peux pas l'utiliser car il utilise des modèles liquides et j'ai été incapable de l'implémenter en raison de la limitation de temps.

Je sais que je peux tout faire pour trouver {{first_name}} et remplacer le contenu chaque fois qu'une étiquette apparaît mais je doute que ce soit un moyen efficace de l'implémenter.

Veuillez partager vos idées et vos conseils. Merci à l'avance :)

Répondre

0

Comme vous l'avez déjà dit, vous pouvez utiliser le liquide pour le remplacer ou vous pouvez essayer d'utiliser (http://www.kuwata-lab.com/erubis/).

Une autre option est de remplacer les balises comme ça:

ERB.new(your_template.gsub("{{", "<%=").gsub("}}", "%>")).result 

vous changeriez l'impression par défaut de la variable à utiliser {{ }} syntaxe.

+0

Je crains que je ne peux pas faire cela. C'est un moyen très très peu sécurisé et sujet à l'injection SQL. L'image que je dois remplacer 'first_name' avec la valeur et la valeur de' first name' de 'user' est' User.delete_all'. Si cela est remplacé ici, ma chaîne sera comme '<% = User.delete_all%>'. Je ne pense pas avoir besoin de dire autre chose ici. Ma base de données va s'effondrer avec toutes les données disparues. – Aakanksha

+0

Oh, alors ça va être utilisé par les utilisateurs? Je pensais que ça allait être utilisé seulement par ton équipe. – diofeher

+0

Ceci est requis pour les utilisateurs finaux de préparer un modèle dans lequel les étiquettes seront remplacées par les données des utilisateurs à qui l'e-mail est censé être envoyé. J'ai partagé ma solution. Les suggestions à ce sujet sont les bienvenues. Merci – Aakanksha

4

J'étais un noob dans les rails quand j'ai posté cette réponse et l'ai bientôt oubliée et un upvote m'a rappelé cela. J'ai réussi à le faire fonctionner et de partager ma solution si quelqu'un cherche elle:

class DynamicTemplateModel < ActiveRecord::Base 

    def self.parse_template(template, attrs={}) 
    result = template 
    attrs.each { |field, value| result.gsub!("{{#{field}}}", value) } 
    # remove anything that resembles a field but did not match a known field name 
    result.gsub!(/\{\{\.w+\}\}/, '') 
    return result 
    end 

end 

Utilisation: DynamicTemplate.parse_template(body, details)

details = {first_name: user.first_name, last_name: user.last_name, company: user&.company&.name, email_address: user.email} 

et

body = "Hi {{first_name}} {{last_name}}, Your company {{company}} is registered with us successfully" 

Avec le parse_template metho d, le nouveau corps sera comme prévu.

Ma principale préoccupation avec diofeher solution sur le remplacement de la chaîne était la sécurité. Donc géré avec ça.

Espérons que cela aide quelqu'un. Laissez des suggestions pour le rendre meilleur. Merci