Pregunta

Usando el código generado por restful_authentication, generalmente obtenemos 'localhost' como la URL en los correos de registro y activación. Estoy intentando crear algo como esto en su lugar:

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

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

Sin embargo, dado que la llamada real para entregar el correo está en un Observador, no puedo hacer esto:

UserMailer.deliver_signup_notification(user, request.host_with_port)

Dado que el método de solicitud no está disponible en los modelos. ¿Cuál es la mejor manera de hacerlo?

Pensé en almacenar URL por dominio en un archivo YAML y luego cargarlo en el inicio, pero luego los puertos pueden cambiar, por lo que no funcionaría.

Alternativamente, pensé en crear una variable de clase estática en algún lugar que se establece al cargar la aplicación, pero no sé cómo hacerlo. ¿El método de solicitud está disponible para inicializadores?

¿Fue útil?

Solución

pruebe el complemento current_request, descrito en http://codeshooter.wordpress.com/2009/08/

funcionó para mí

Otros consejos

Utilizando ActiveMailer, configuro esto en config/envrionments/production.rb

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

En el modelo 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

Y luego en la vista de correo 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) %>

Que se genera en el correo:

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

También tengo el mismo problema y esto es lo que he hecho

  1. en el modelo de usuario agrego: host a attr_accessible, luego agrego este método

    def host=(value)
      write_attribute :host, value
    end
    
  2. en el controlador de usuario, en los métodos que envía correos electrónicos como crear y activar pongo

    @user.host = request.host_with_port

ya que todavía soy un novato en los rieles, así que realmente espero que alguien encuentre una solución de mejores prácticas para este problema.

El nombre de host al que accede su servidor se encuentra en el encabezado Host de la solicitud. No debería tener acceso a él en los modelos (suponiendo que los rieles estén sanos). Pero si puede acceder a los objetos de solicitud en los controladores, puede insertar ese valor en su campo de modelo cuando extraiga los objetos de modelo de db.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top