Как отправлять URL-адреса в электронных письмах, специфичных для среды?

StackOverflow https://stackoverflow.com/questions/662708

  •  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

У меня тоже такая же проблема и вот что я сделал

  1. в модели пользователя я добавляю :host в attr_accessible, затем добавляю этот метод

    def host=(value)
      write_attribute :host, value
    end
    
  2. в пользовательском контроллере, в методах отправки электронной почты, таких как создание и активация, я помещаю

    @user.host = request.host_with_port

поскольку я все еще новичок в работе, поэтому я очень надеюсь, что кто-нибудь найдет лучшее решение этой проблемы.

Имя хоста, по которому осуществляется доступ к вашему серверу, находится в заголовке Host запроса.У вас не должно быть доступа к нему в моделях (при условии, что рельсы в здравом уме).Но если у вас есть доступ к объектам запроса в контроллерах, вы можете вставить это значение в поле вашей модели, когда вы извлекаете объекты модели из базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top