Pergunta

Usando o código gerado pelo restful_authentication, que costuma ficar 'localhost' como o URL na inscrição e mails de ativação. Eu estou tentando criar algo parecido com isso em vez disso:

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

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

No entanto, desde a chamada real para entregar o correio está em um Observer, eu não posso fazer isso:

UserMailer.deliver_signup_notification(user, request.host_with_port)

Uma vez que o método de solicitação não está disponível em modelos. Qual é a melhor maneira de ir sobre como fazer isso?

Eu pensei sobre o armazenamento de URLs por domínio em um arquivo YAML e, em seguida, carregá-lo na partida, mas depois as portas podem mudar, por isso não iria funcionar.

Como alternativa, eu pensei sobre a criação de um lugar variável de classe estática que é definido ao carregar o aplicativo, mas eu não sei como ir sobre fazer isto. É o método de solicitação disponível para initializers?

Foi útil?

Solução

tentar current_request plugin, descrito em http://codeshooter.wordpress.com/2009/08/

funcionou para mim

Outras dicas

Usando ActiveMailer, eu definir isso no config/envrionments/production.rb

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

No 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

E, em seguida, na app/views/event_mailer/new_event.rb vista mailer

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

que gera no e-mail:

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

Eu tenho um mesmo problema também e aqui está o que eu fiz

  1. no modelo de usuário I acrescentar: acolhimento para attr_accessible, então eu adicionar este método

    def host=(value)
      write_attribute :host, value
    end
    
  2. no controlador de usuário, nos métodos que envia e-mail como criar e ativar Coloquei

    @user.host = request.host_with_port

desde que eu ainda sou um noob-on-rails então eu realmente espero que alguém vai chegar a uma solução mais prática para este problema.

O nome do host do servidor é acessado por encontra-se no cabeçalho do host do pedido. Você não deve ter acesso a ele nos modelos (assumindo trilhos é sane). Mas se você pode acessar objetos request nos controladores você pode inserir esse valor para o seu campo de modelo quando você puxa os objetos de modelo de banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top