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_user
由ApplicationController
中的设计定义,根据文档,ActionMailer
使用AbstractController::Base
。在这种情况下,将current_user
存储在类变量中是不是一个坏主意?
有谁知道如何在current_user
使用ActionMailer::Preview
帮助器?
答案 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