Como enviar URLs em e-mails específicos para meio ambiente?
-
20-08-2019 - |
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?
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
-
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
-
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.