2014-07-10 3 views
2

J'utilise Action Mailer et j'essaie d'inclure un lien. Pour une raison quelconque le code HTML est échappé et, plutôt que de montrer un lien, il montre:Rails actionmailer échapper HTML avec link_to

<a href="http://localhost:3000/employer?task_review=true">here</a> 

Au contraire, il devrait juste montrer le lien. Voici le Ruby:

<%= raw(link_to("here", employer_url(:task_review => 'true'))) %> 

J'ai aussi essayé:

<%= link_to("here", employer_url(:task_review => 'true')).html_safe %> 

et

<%= link_to("here", employer_url(:task_review => 'true')) %> 

Aucun d'entre eux ne semble fonctionner. J'ai regardé d'autres réponses SO à des questions similaires et ils disent tous d'utiliser soit raw ou html_safe, mais ni travailler. Quelqu'un a-t-il une idée?

+5

Etes-vous sûr que l'email est envoyé au format HTML? pourrait-il être qu'il est envoyé au format texte? –

+0

Je pense que c'est au format html. Comment puis-je le vérifier/le changer? – Philip7899

+0

Regardez le message brut ('More -> show original' dans Gmail) et cherchez' Content-Type: text/html; charset = "UTF-8" ' –

Répondre

1

de la description de votre problème, il On dirait que le problème n'est pas dans le rendu du modèle, mais dans le type de contenu. Un client de messagerie électronique accepte différents types de contenu et restitue en conséquence - analyse et restitue le code HTML si le type de contenu est text/html ou affiche le texte tel quel si le type de contenu est text/plain. De nombreux expéditeurs envoient du courrier contenant plus d'une version de la messagerie (un HTML et un TEXTE) pour prendre en charge les anciens clients de messagerie qui ne disposent pas de fonctionnalités HTML.

Pour vérifier si le courrier de votre programme envoyé a une version HTML, ouvrez le message brut (dans Gmail qui serait sous More -> show original) et de chercher du texte qui ressemble à ceci:

------=_NextPart_001_0048_01CE7CA4.8389CCD0 
Content-Type: text/html; 
    charset="windows-1255" 

Cela signifie qu'il ya une version HTML du courrier que vous avez envoyé.

Si toutefois, vous ne voyez quelque chose comme est:

------=_NextPart_001_0048_01CE7CA4.8389CCD0 
Content-Type: text/plain; 
    charset="windows-1255" 

votre problème est là. (Si les deux options apparaissent - votre client de messagerie ne supporte pas HTML)

Si vous trouvez que vous n'envoyez pas une version HTML, assurez-vous que votre fichier modèle a l'extension .html.erb plutôt .text.erb (ce dernier indique au logiciel de messagerie que vous voulez un format de courrier texte seulement).

0

dans config/environnements/development.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

Cela peut résoudre le problème.

+0

Merci, mais c'est déjà là. – Philip7899

0

Pour ActionMailer vous devez construire l'URL avec l'aide url_for parce que d'autres aides comme link_to ne sont pas disponibles dans ActionMailer, ou comprennent les méthodes d'assistance dans votre ActionMailer classe:

<%= url_for controller: 'login', 
       action: 'verify', 
       only_path: false, 
       host: 'http://myawesomesite.com', 
       params: { token: '12hew' } %> 
+0

Si je fais cela, comment puis-je contrôler ce que dit le texte du lien? – Philip7899