user_mailer.html.erb可以访问哪些变量?

时间:2013-05-20 04:57:06

标签: ruby-on-rails actionmailer

我的user_mailer.rb:

class UserMailer < ActionMailer::Base
  default :from => "notifications@example.com"
  def welcome_email(user)
    @user = user
    @url  = "http://example.com/login"
    mail(:to => user.email,:subject => "Welcome to My Awesome Site") do |format|
      format.html
    end
  end
end

这就是我的user_mailer.html.erb的样子:

<!DOCTYPE html>
<html>
  <body>   
    <%= yield %> 
  </body>
</html>

我可以在user_mailer.html.erb中访问哪些内容。 我在哪里需要定义环境变量,以便我可以在这里访问它?

2 个答案:

答案 0 :(得分:1)

我猜你是从here开始的?

您可以将user_mailer.html.erb视为视图,user_mailer.rb视为其控制器。因此,如果您已定义了实例变量@users,那么您可以在邮件中使用它。根据链接中的示例:

user_mailer.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
  </head>
  <body>
    <h1>Welcome to example.com, <%= @user.name %></h1>
    <p>
      You have successfully signed up to example.com,
      your username is: <%= @user.login %>.<br/>
    </p>
    <p>
      To login to the site, just follow this link: <%= @url %>.
    </p>
    <p>Thanks for joining and have a great day!</p>
  </body>
</html>

您也可以使用帮助程序,因此没有理由像这样对URL进行硬编码,而是可以使用sign_in_url(或者您对登录路径的任何路径)。

请注意,在电子邮件中,您应始终使用something_url而不是something_path(因此root_url等)。

您应该使用welcome_email方法定义变量:

def welcome_email(user)
  @user = user
  @time = Time.now
  @slogan = "My App's slogan"
  ...
  mail(:to => user.email,:subject => "Welcome to My Awesome Site") do |format|
    format.html
  end
end

答案 1 :(得分:0)

您可以访问视图部件中的任何实例变量。所以在你的情况下,

 @user and @url are accessible in user_mailer.html.erb