Как отправлять URL-адреса в электронных письмах, специфичных для среды?
-
20-08-2019 - |
Вопрос
Используя код, сгенерированный restful_authentication, мы обычно получаем «localhost» в качестве URL-адреса в письмах о регистрации и активации.Вместо этого я пытаюсь создать что-то вроде этого:
def signup_notification(user, host)
setup_email(user)
@subject += 'Please activate your new account'
@body[:url] = "http://#{host}/activate/#{user.activation_code}"
end
Однако, поскольку фактический вызов для доставки почты находится в Observer, я не могу этого сделать:
UserMailer.deliver_signup_notification(user, request.host_with_port)
Так как метод запроса недоступен в моделях.Как лучше всего это сделать?
Я думал о сохранении URL-адресов каждого домена в файле YAML и последующей загрузке его при запуске, но тогда порты могут измениться, поэтому это не сработает.
В качестве альтернативы я подумал о создании где-нибудь переменной статического класса, которая устанавливается при загрузке приложения, но я не знаю, как это сделать.Доступен ли метод запроса для инициализаторов?
Решение
попробуйте плагин current_request, описанный в http://codeshooter.wordpress.com/2009/08/
работал у меня
Другие советы
Используя ActiveMailer, я установил это в config/envrionments/production.rb
config.action_mailer.default_url_options = { :host => "my.host.com" }
В модели 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
И затем в представлении почтовой программы 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) %>
Что генерируется по почте:
You can view the event by going to: http://my.host.com/events/11
У меня тоже такая же проблема и вот что я сделал
в модели пользователя я добавляю :host в attr_accessible, затем добавляю этот метод
def host=(value) write_attribute :host, value end
в пользовательском контроллере, в методах отправки электронной почты, таких как создание и активация, я помещаю
@user.host = request.host_with_port
поскольку я все еще новичок в работе, поэтому я очень надеюсь, что кто-нибудь найдет лучшее решение этой проблемы.
Имя хоста, по которому осуществляется доступ к вашему серверу, находится в заголовке Host запроса.У вас не должно быть доступа к нему в моделях (при условии, что рельсы в здравом уме).Но если у вас есть доступ к объектам запроса в контроллерах, вы можете вставить это значение в поле вашей модели, когда вы извлекаете объекты модели из базы данных.