Domanda

Usando il codice generato da restful_authentication, di solito riceviamo 'localhost' come URL nelle mail di iscrizione e attivazione. Sto cercando di creare qualcosa del genere invece:

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

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

Tuttavia, poiché la chiamata effettiva per consegnare la posta è in un osservatore, non posso farlo:

UserMailer.deliver_signup_notification(user, request.host_with_port)

Poiché il metodo di richiesta non è disponibile nei modelli. Qual è il modo migliore per farlo?

Ho pensato di archiviare gli URL per dominio in un file YAML e quindi caricarlo all'avvio, ma le porte potrebbero cambiare, quindi non funzionerebbe.

In alternativa, ho pensato di creare una variabile di classe statica da qualche parte impostata durante il caricamento dell'applicazione, ma non so come procedere. Il metodo di richiesta è disponibile per gli inizializzatori?

È stato utile?

Soluzione

prova il plugin current_request, descritto in http://codeshooter.wordpress.com/2009/08/

ha funzionato per me

Altri suggerimenti

Usando ActiveMailer, ho impostato questo in config/envrionments/production.rb

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

Nel modello 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

E poi nella vista mailer 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) %>

Che genera nella posta:

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

Anch'io ho lo stesso problema ed ecco cosa ho fatto

  1. nel modello utente aggiungo: host a attr_accessible, quindi aggiungo questo metodo

    def host=(value)
      write_attribute :host, value
    end
    
  2. nel controller utente, nei metodi che invia e-mail come creare e attivare ho messo

    @user.host = request.host_with_port

dal momento che sono ancora un noob-on-rails quindi spero davvero che qualcuno troverà una soluzione delle migliori pratiche per questo problema.

Il nome host a cui accede il server si trova nell'intestazione Host della richiesta. Non dovresti accedervi nei modelli (supponendo che le rotaie siano sane). Ma se è possibile accedere agli oggetti richiesta nei controller, è possibile inserire quel valore nel campo del modello quando si estraggono gli oggetti del modello da db.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top