45 votes

options d'URL par défaut action mailer et hôte de demande

J'essaie de définir les options d'URL par défaut: host for action mailer.

J'ai l'ensemble ci-dessous dans tous les fichiers d'environnement

 config.action_mailer.default_url_options = {
  :host => "localhost"
}
 

Je veux le rendre plus dynamique en fournissant l'hôte de demande.

quand j'essaye de le régler par

 config.action_mailer.default_url_options = {
  :host => request.domain
}
 

OU

 config.action_mailer.default_url_options = {
  :host => request.env["SERVER_NAME"]
}
 

Il jette une erreur ... ne reconnaît pas l'objet "demande"

existe-t-il un moyen de définir cela sur l'hôte de la demande, pas en codant en dur ...?

51voto

montrealmike Points 3795

Il est également possible de définir une valeur par défaut de l'hôte qui sera utilisé dans tous les expéditeurs par le réglage de l'option :host dans le ActionMailer::Base.default_url_options de hachage

dans un application_controller.rb before_filter ajouter:

  ActionMailer::Base.default_url_options = {:host => request.host_with_port}

Alternativement, vous pouvez passer à la requête lors de l'appel de l'expéditeur de la fonction du contrôleur

class UserMailer < ActionMailer::Base

  def welcome_email(user, request)
    UserMailer.default_url_options[:host] = request.host_with_port #option1
    @user = user
    @url  = user_url(@user, host: request.host_with_port ) #option2 (do this for each link)
    mail(:to => user.email,
         :subject => "Welcome to My Awesome Site")
  end
end

Source : http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views

11voto

Diego Plentz Points 1493

Vous pouvez créer un filtre par défaut comme celui-ci:

 # application_controller.rb
before_filter :mailer_set_url_options

...

def mailer_set_url_options
  ActionMailer::Base.default_url_options[:host] = request.host_with_port
end
 

(source: http://www.cherpec.com/2009/06/missing-host-to-link-to-please-provide-host-parameter-or-set-default_url_optionshost/ )

6voto

Doon Points 7858

le problème est que ce sont des initialiseurs, ils sont exécutés lorsque les rails se chargent, et non lorsque vous appelez le programme de messagerie actif.

mais vous n'avez pas besoin d'utiliser le default_url, vous pouvez simplement passer le nom d'hôte dans les routes url_for / named dans chacune de vos vues de mailer. La valeur par défaut évite simplement d'avoir à le faire.

voir la section http://api.rubyonrails.org/classes/ActionMailer/Base.html sur la génération d'URL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X