Rails: génère une URL complète dans une vue ActionMailer
Je suis en utilisant ActionMailer pour envoyer un e-mail de confirmation. L'email doit contenir un lien vers le site de vérifier que l'utilisateur, mais je ne peux pas convaincre les Rails pour générer une URL complète (y compris le domaine, etc).
Je suis en utilisant:
<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
de mon point de vue
Partie b:
Le mode de développement des Rails de saisines si je n'ai pas de spécifier l'hôte explicilty dans le lien ci-dessus. Mais je ne veux pas le faire dans la production. Toutes les solutions?
source d'informationauteur Mike Sutton
Vous devez vous connecter pour publier un commentaire.
Pour résoudre le problème de passer d'un hôte pour générer des URLs dans ActionMailer, découvrez ce plugin et la la raison pourquoi je l'ai écrit.
Pour résoudre le premier problème, utilisez routes nommées, le cas échéant. Au lieu de
en supposant que la route est appelée
login
utilisezRemarque, je suis en utilisant
login_url
paslogin_path
.Je ne suis pas sûr si c'est ce que vous voulez, mais dans config/environments/développement.rb vous pouvez spécifier des options par défaut pour les mailer url
vous pouvez faire de même en config/environments/production.rb
Je ne sais pas pourquoi les solutions précédentes semblent si compliqués, mais depuis que je suis ici, pourquoi ne pas donner à mes 2 cents...
Aller à
/config/environments
et d'ajouter:config.absolute_site_url = 'your site url'
pour l'environnement respectif (ie. dans le développement.rb, test.rb, ou de la production.rb). Redémarrez le serveur web.
Cela vous permet d'appeler
Rails.application.config.absolute_site_url
pour obtenir l'URL souhaitée. Pas besoin de plugins ou bizarre cheat, juste stocker l'url du site comme une application à l'échelle variable.Je pense que c'est pas 100% de manière correcte, mais cela peut aussi être une solution :
Voir le à l'Aide de l'actif hôtes dans la section la documentation. Vous devez spécifier un
asset_host
. Vous pouvez également construire dynamiquement à partir de la demande de chaînage"#{request.protocol}#{request.host_with_port}/login/?guid=#{@user.new_user.guid}"