是因为Rails 6中的actionmailer预览功能使用了不同的上下文环境。在预览邮件时,Rails会创建一个新的controller实例来渲染邮件预览视图,而不是使用实际的controller实例。这意味着在预览中,实例变量不会自动加载。
为了在actionmailer预览中使用实例变量,可以通过在预览类中手动设置实例变量的方式来实现。可以在预览类的方法中使用assign
方法来设置实例变量,然后在预览视图中使用该实例变量。
以下是一个示例:
# app/mailers/previews/my_mailer_preview.rb
class MyMailerPreview < ActionMailer::Preview
def welcome_email
user = User.first
assign(:user, user) # 设置实例变量
MyMailer.welcome_email(user)
end
end
# app/mailers/my_mailer.rb
class MyMailer < ActionMailer::Base
def welcome_email(user)
@user = user
mail(to: user.email, subject: 'Welcome to My App')
end
end
# app/views/my_mailer/welcome_email.html.erb
<h1>Welcome <%= @user.name %>!</h1>
<p>Thank you for signing up.</p>
在上面的示例中,MyMailerPreview
类中的welcome_email
方法手动设置了@user
实例变量,并将其传递给MyMailer
的welcome_email
方法。然后,在预览视图welcome_email.html.erb
中,可以使用@user
实例变量来渲染邮件内容。
这样,就可以在actionmailer预览中加载实例变量了。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云