Как генерировать правильные URL-адреса в шаблонах рассылок?

Я использую Ruby on Rails 3.1.0 и хотел бы правильно генерировать URL-адреса в сообщениях электронной почты HTML. В моем файле среды я установил

config.action_mailer.default_url_options = { :host => 'my_site.org' }

В файле просмотра электронной почты (.html.erb) я указываю

<%= link_to @user.name, users_url(@user) %>

Когда я перехожу к полученному электронному письму, сгенерированный URL-адрес http://users/1, конечно, неправильный. Итак, как мне сгенерировать правильные URL-адреса в шаблонах рассылок, чтобы иметь http://my_site.org/users/1 ссылок в теле сообщения?


Я также пытался установить default_url_options в моем файле mailer.rb

class MyCustom::Mailer < ActionMailer::Base
  default_url_options[:host] = 'my_site.org'

  def test_sending
    ...
  end
end

но это не работает.


person user502052    schedule 12.01.2012    source источник


Ответы (3)


users_path — это относительный путь (/users/1). Для электронной почты вам нужен абсолютный путь, поэтому используйте users_url(@user), что даст http://myapp.com/users/1 вместо.

person MrTheWalrus    schedule 12.01.2012
comment
Что, если маршрут, который я использую, не имеет вспомогательных методов, таких как thing_url или thing_path? - person Michael; 04.12.2018

ваша настройка action_mailer верна.

Но вы должны использовать _url, а не _path для link_to,

<%= link_to @user.name, users_url(@user) %>
person John Beynon    schedule 12.01.2012
comment
Вы правы, но, честно говоря, я приму первый ответ. В любом случае, спасибо. - person user502052; 12.01.2012

Убедитесь, что вы установили параметр конфигурации. Чтобы убедиться, что он использует абсолютный путь, используйте:

<%= link_to, "My Profile", users_url(:only_path => false, @user) %>

ИЛИ указать хост конкретно в ссылке:

<%= link_to, "My Profile", users_url(:host => "example.com", @user) %>

Это объясняется здесь:

помощники ActionView

person josephrider    schedule 12.01.2012