Rails 4.1: доступ к current_user в ActionMailer :: Preview

В Rails 4.1 есть удобный способ предварительный просмотр почтовых программ с ActionMailer::Preview. Все мои почтовые программы принимают параметр user, и я хотел бы передать current_user (от Devise) для предварительного просмотра.

Если я попробую это сделать, это не сработает.

class SubscriptionsMailerPreview < ActionMailer::Preview
  # Preview this email at http://localhost:3000/rails/mailers/subscriptions_mailer/new
  def new
    SubscriptionsMailer.new(current_user)
  end
end

Возвращает undefined local variable or method 'current_user' for #<SubscriptionsMailerPreview:0xa6d4ee4>.

Я подозреваю, что это потому, что current_user определен Devise в ApplicationController, и, согласно документации, ActionMailer использует AbstractController::Base. В таком случае, будет ли сохранение current_user в переменной класса плохой идеей?

Кто-нибудь знает, как можно использовать помощник current_user в ActionMailer::Preview?


person Xavier    schedule 13.08.2014    source источник


Ответы (2)


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

Почтовому агенту и его превью не нужно знать, кто такой current_user. Работа почтовой программы - отправить письмо получателю. И его предварительный просмотр предназначен для визуальной демонстрации этого поведения.

Создайте нового пользователя в предварительном просмотре вашей почтовой программы и перейдите к почтовой программе.

  def new
    user = User.create! # etc...
    SubscriptionsMailer.new(user)
  end

Неважно, кто пользователь. Важно то, что это пользовательский объект с поведением, ожидаемым почтовой программой.

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

person Mohamad    schedule 05.12.2014

Вы правы, метод, определенный в контроллере, не будет доступен в помощнике. Эти сообщения могут вам помочь:
Куда мне положить вспомогательные методы для представлений ActionMailer?
Доступ к помощникам из почтовой программы? < br /> https://www.ruby-forum.com/topic/168949

person Ashutosh Tiwari    schedule 05.12.2014