Question

En utilisant le code généré par restful_authentication, nous obtenons généralement "localhost" en tant qu'URL dans les courriers d'inscription et d'activation. J'essaie de créer quelque chose comme ceci à la place:

def signup_notification(user, host)
  setup_email(user)
  @subject    += 'Please activate your new account'

  @body[:url]  = "http://#{host}/activate/#{user.activation_code}"
end

Cependant, puisque l'appel à livrer le courrier est dans un observateur, je ne peux pas le faire:

UserMailer.deliver_signup_notification(user, request.host_with_port)

Puisque la méthode de requête n'est pas disponible dans les modèles. Quelle est la meilleure façon de s'y prendre?

J'ai envisagé de stocker les URL par domaine dans un fichier YAML, puis de le charger au démarrage, mais les ports pourraient alors changer, de sorte que cela ne fonctionnerait pas.

Sinon, j'ai envisagé de créer une variable de classe statique quelque part, qui est définie lors du chargement de l'application, mais je ne sais pas comment s'y prendre. La méthode de requête est-elle disponible pour les initialiseurs?

Était-ce utile?

La solution

essayez le plugin current_request, décrit à l'adresse http://codeshooter.wordpress.com/2009/08/

a travaillé pour moi

Autres conseils

À l’aide d’ActiveMailer, j’ai défini cela dans le config/envrionments/production.rb

config.action_mailer.default_url_options = { :host => "my.host.com" }

Dans le modèle app/models/event_mailer.rb

def new_event(event)
    recipients  EventMailer::NO_REPLY
    bcc         event.emails('new_event')
    from        EventMailer::FROM_EMAIL
    subject     "#{EventMailer::SUBJECT_HEADER} Event Updated :: #{event.title}"
    content_type    "text/plain"
    body        :event => event
end

Et ensuite dans la vue du courrier app/views/event_mailer/new_event.rb

You can view the event by going to: <%= url_for(:controller => "events", :action => "show", :id => @event.id, :only_path => false) %>

Qui génère dans le courrier:

You can view the event by going to: http://my.host.com/events/11

J'ai le même problème aussi et voici ce que j'ai fait

  1. dans le modèle utilisateur, j'ajoute: hôte pour attr_accessible, puis j'ajoute cette méthode

    def host=(value)
      write_attribute :host, value
    end
    
  2. dans le contrôleur utilisateur, dans les méthodes qui envoient un courrier électronique comme créer et activer, je mets

    @user.host = request.host_with_port

étant donné que je suis toujours un noob-on-rails, j'espère vraiment que quelqu'un trouvera une solution de meilleure pratique pour résoudre ce problème.

Le nom d'hôte de votre serveur est indiqué dans l'en-tête Host de la requête. Vous ne devriez pas y avoir accès dans les modèles (en supposant que les rails soient sains). Mais si vous pouvez accéder aux objets de requête dans les contrôleurs, vous pouvez insérer cette valeur dans votre champ de modèle lorsque vous extrayez les objets de modèle de la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top