Rails 4.1:在ActionMailer :: Preview中访问current_user

时间:2014-08-13 16:22:06

标签: ruby-on-rails actionmailer ruby-on-rails-4.1

Rails 4.1与ActionMailer::Preview的{​​{3}}有很好的方法。我的所有邮件都采用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_userApplicationController中的设计定义,根据文档,ActionMailer使用AbstractController::Base。在这种情况下,将current_user存储在类变量中是不是一个坏主意?

有谁知道如何在current_user使用ActionMailer::Preview帮助器?

2 个答案:

答案 0 :(得分:2)

我会问你(和选民下来)想一想:如果你把你的邮件工作(就像任何生产应用程序那样)移到后台会怎么样?你会如何得到当前的用户?

邮件程序及其预览无法知道current_user是谁。邮件程序的工作是将邮件发送给它收到的用户。它的预览是在视觉上证明这种行为。

在邮件程序预览中创建一个新用户,然后传递给邮件程序。

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

用户是谁。重要的是它是一个具有邮件所期望的行为的用户对象。

如果您想测试应用程序是否会向current_user发送邮件,请为此编写功能测试。邮件预览不应该关心。

答案 1 :(得分:0)

您在Controller中定义的正确方法将无法在helper中使用。 这些帖子可以帮助您:
Where do I put helper methods for ActionMailer views?
Access helpers from mailer?
https://www.ruby-forum.com/topic/168949