Доступ помощников из почтовой программы? - PullRequest
46 голосов
/ 08 февраля 2011

Я пытаюсь получить доступ к вспомогательным методам из почтовой программы rails 3, чтобы получить доступ к текущему пользователю для сеанса.

Я поместил приложение helper: в мой почтовый класс, который, кажется, работает, за исключением того, что определенные в нем методы не доступны для моего почтового ящика (я получаю неопределенные ошибки). Кто-нибудь знает, как это должно работать?

Вот мой класс:

class CommentMailer < ActionMailer::Base
  default :from => "Andre Fournier <andre@gfournier.com>"

  helper :application
end

Спасибо, Шон

Ответы [ 11 ]

69 голосов
/ 11 августа 2011

Чтобы получить доступ к помощникам приложений из представлений ActionMailer, попробуйте добавить это:

add_template_helper(ApplicationHelper)

На ваш ActionMailer (прямо под вашей default :from строкой).

48 голосов
/ 11 марта 2012

Использование helper ApplicationHelper

class NotificationsMailer < ActionMailer::Base

  default from: "Community Point <Team@CommunityPoint.ca>"
  helper ApplicationHelper
  helper NotificationMailerHelper

  # ...other code...

ПРИМЕЧАНИЕ. Эти вспомогательные методы доступны только для видов . Они недоступны в классе почтовой программы (NotificationMailer в моем примере).

Если они вам нужны в реальном классе почтовых программ, используйте include ApplicationHelper, например:

class NotificationMailer < ActionMailer::Base

  include ApplicationHelper

  # ... the rest of your mailer class.

end

С этот другой ТАК вопрос .

24 голосов
/ 25 июля 2013

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

Это зависит от того, что вы делаете с методами, которые были определены в вспомогательном модуле. Если они являются методами класса, и все, что не вызывается в конкретном экземпляре, похоже, является методом класса для 3.2.13, вам нужно использовать

extend ApplicationHelper

если методы экземпляра

include ApplicationHelper

и если вы хотите использовать их в представлении почтовой программы

helper ApplicationHelper
8 голосов
/ 19 июля 2011

Вы можете попробовать смешать в необходимом вспомогательном модуле:

class CommentMailer < ActionMailer::Base
  include ApplicationHelper
end
3 голосов
/ 14 ноября 2015

include ActionView::Helpers::TextHelper у меня работало в контроллере Mailer (файл .rb).Это позволило мне использовать помощник множественного числа в действии контроллера Mailer (помощники работали нормально с самого начала в представлениях Mailer).Ни один из других ответов не сработал, по крайней мере, на Rails 4.2

3 голосов
/ 28 сентября 2012

Ответ Джоша Пинтера правильный, но я обнаружил, что в этом нет необходимости.

Что необходимо необходимо, чтобы правильно назвать помощника.

NotificationMailerHelper правильно. NotificationMailersHelper (обратите внимание) неверно.

Класс и имя файла помощника должны совпадать и быть правильно написаны.

Рельсы 3.2.2

2 голосов
/ 07 октября 2016

Единственная версия метода для превращения метода в помощника, доступная в ApplicationController, также работает в ActionMailer:

class ApplicationMailer < ActionMailer::Base
  helper_method :marketing_host

  def marketing_host
    "marketing.yoursite.com"
  end
end

оттуда вы можете позвонить marketing_host с любого из ваших почтовых просмотров

2 голосов
/ 01 марта 2014

Если вы хотите вызвать вспомогательный метод из ActionMailer, вам нужно включить помощник (модуль) в файл Mailer, как, если имя модуля помощника «UserHelper», то в файле Mailer необходимо написать следующее* Или

class CommentMailer < ActionMailer::Base
    default :from => "Andre Fournier <andre@gfournier.com>"
    include UserHelper
end

Надеюсь, это полезно.

1 голос
/ 13 апреля 2011

Я не совсем уверен, что вы здесь делаете, но когда я хочу получить доступ к current_user из почтовой программы, я создаю метод почтовой программы, которому я передаю пользователя в качестве аргумента:

class CommentMailer < ActionMailer::Base
  default :from => "Andre Fournier <andre@gfournier.com>"

  def blog_comment(user)
    @recipients                   = user.email
    @from                         = "andre@gfournier.com"
    @sent_on                      = Time.now
    @timestamp                    = Time.now
    @user                         = user
  end
end

С учетом вышесказанного, @user, как и все другие переменные экземпляра, доступны из представлений почтовой программы ./views/comment_mailer/blog_comment.html.erb и ./views/comment_mailer/blog_comment.text.erb

Отдельно вы можете создать помощника с именем

comment_mailer_helper.rb

и добавить в него все методы, которые вы хотите, чтобы они были доступны для представлений вашего почтовика.Мне кажется, это больше похоже на то, что вам может понадобиться в отношении помощников, потому что помощники предназначены для помощи представлениям, тогда как почтовая программа аналогична контроллеру.

0 голосов
/ 07 июля 2017

Ни один из *_path помощников не доступен по умолчанию внутри электронного письма. Вместо этого необходимо использовать форму *_url нужного помощника. Так, например, вместо использования user_path(@user) необходимо использовать user_url(@user). См. Основы Action Mailer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...