如何将多个对象传递到rails中的邮件程序/电子邮件内容中

时间:2014-01-16 15:52:02

标签: ruby-on-rails actionmailer

当用户发帖(sub_opp)时,我会向用户发送电子邮件。但是,我想在电子邮件中包含这项运动(sub_opp模型中的列)。我在sub_opp上遇到一个未定义的方法错误,当它碰到下面例子中的邮件时。

创建sub_opp的控制器

def create
@sub_opp = SubOpp.new(sub_opp_params)
respond_to do |format|
  if @sub_opp.save
    user = User.find_by_id(@sub_opp.user_id)
    sub_opp = @sub_opp
    UserMailer.posted_subopp_email(user, sub_opp).deliver
    .... continued

邮件控制器

  def posted_subopp_email(user, sub_opp)
    mail( :to => user.email,  :subject => 'You made a post!' )
  end

梅勒视图

<!DOCTYPE html>
 <html>
  <head>
   <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h3>You posted to the sub feed!</h3>
    <p>You made a post.</p>
    <p><%= sub_opp.sport %></p>
  </body>
 </html>

为什么不&lt;%= sub_opp.sport%&gt;在这个例子中工作? Sport是sub_opp模型中的一个专栏。

由于

1 个答案:

答案 0 :(得分:7)

首先创建一个实例变量。实例变量将在您的邮件程序视图中提供。

将您的邮件程序视为MVC中的控制器。

def posted_subopp_email(user, sub_opp)
  @sub_opp = sub_opp
  @user = user
  mail( :to => user.email,  :subject => 'You made a post!' )
end

然后像在你的观点中那样访问它

<body>
  <h3>You posted to the sub feed!</h3>
  <p>You made a post.</p>
  <p><%= @sub_opp.sport %></p>
</body>