Как отправить URL-адреса в сообщениях, характерных для окружающей среды? - PullRequest
0 голосов
/ 19 марта 2009

Используя код, сгенерированный 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 и затем загрузить его при запуске, но затем порты могут измениться, поэтому он не будет работать.

В качестве альтернативы я думал о создании статической переменной класса, которая будет установлена ​​при загрузке приложения, но я не знаю, как это сделать. Доступен ли метод запроса для инициализаторов?

Ответы [ 4 ]

1 голос
/ 02 октября 2009

попробуйте плагин current_request, описанный в http://codeshooter.wordpress.com/2009/08/

работал для меня

1 голос
/ 19 марта 2009

Используя 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 голос
/ 20 марта 2009

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

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

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

    @user.host = request.host_with_port

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

0 голосов
/ 19 марта 2009

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

...