Frage

Mithilfe des von restful_authentication generierten Codes erhalten wir normalerweise „localhost“ als URL in den Anmelde- und Aktivierungs-E-Mails.Ich versuche stattdessen so etwas zu erstellen:

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

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

Da der eigentliche Aufruf zur Zustellung der E-Mail jedoch in einem Observer erfolgt, kann ich Folgendes nicht tun:

UserMailer.deliver_signup_notification(user, request.host_with_port)

Da die Anforderungsmethode in Modellen nicht verfügbar ist.Was ist der beste Weg, dies zu tun?

Ich habe darüber nachgedacht, URLs pro Domain in einer YAML-Datei zu speichern und sie dann beim Start zu laden, aber dann könnten sich die Ports ändern, sodass es nicht funktionieren würde.

Alternativ habe ich darüber nachgedacht, irgendwo eine statische Klassenvariable zu erstellen, die beim Laden der Anwendung festgelegt wird, weiß aber nicht, wie ich das machen soll.Ist die Anforderungsmethode für Initialisierer verfügbar?

War es hilfreich?

Lösung

Probieren Sie das Plugin current_request aus, beschrieben unter http://codeshooter.wordpress.com/2009/08/

hat bei mir funktioniert

Andere Tipps

Mit ActiveMailer habe ich dies im eingestellt config/envrionments/production.rb

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

Im Modell 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

Und dann in der Mailer-Ansicht 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) %>

Was in der Mail generiert:

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

Ich habe auch das gleiche Problem und hier ist, was ich getan habe

  1. Im Benutzermodell füge ich :host zu attr_accessible hinzu, dann füge ich diese Methode hinzu

    def host=(value)
      write_attribute :host, value
    end
    
  2. Im Benutzercontroller, in den Methoden, die E-Mails senden, wie „Erstellen“ und „Aktivieren“, habe ich eingegeben

    @user.host = request.host_with_port

Da ich immer noch ein Neuling auf Schienen bin, hoffe ich wirklich, dass jemand eine Best-Practice-Lösung für dieses Problem findet.

Der Hostname, über den auf Ihren Server zugegriffen wird, finden Sie im Host-Header der Anfrage.Sie sollten in den Modellen keinen Zugriff darauf haben (vorausgesetzt, die Schienen sind in Ordnung).Wenn Sie jedoch auf Anforderungsobjekte in den Controllern zugreifen können, können Sie diesen Wert in Ihr Modellfeld einfügen, wenn Sie die Modellobjekte aus der Datenbank abrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top