0

我的最终目标是在创建工单后发送电子邮件。当我使用手动输入的一个电子邮件地址时,它可以完美运行,但是当我尝试通过数据库提取已注册用户的电子邮件地址时,我收到一条错误消息:未定义的方法“电子邮件”对于零:NilClass

我确信这是一个简单的解决方案,但我一直迷路并绕圈子。这是我所在位置的代码 - 票务控制器:

def create
@ticket = Ticket.new(params[:ticket])

respond_to do |format|
  if @ticket.save
    TicketMailer.ticketcreated_email(@user).deliver
    format.html { redirect_to @ticket, notice: 'Ticket was successfully created.' }
    format.json { render json: @ticket, status: :created, location: @ticket }
  else
    format.html { render action: "new" }
    format.json { render json: @ticket.errors, status: :unprocessable_entity }
  end
end
end

ticket_mailer.rb

class TicketMailer < ActionMailer::Base
  default :from => "myemailaddress@gmail.com"

  def ticketcreated_email(user)
    mail(:to => user.email, :subject => "Simple Test")
  end
end

如果我只是将 ticket_mailer.rb 中的“user.email”替换为我的电子邮件地址,则邮件文件 / 等等。但是,一旦我接触到使用 Devise 构建的用户,我就无法获取他们的数据。

4

2 回答 2

0

您希望将电子邮件发送给当前用户吗?您可能想尝试:

TicketMailer.ticketcreated_email(current_user).deliver

或者,如果您想要为每个用户自定义电子邮件,您可能需要一个循环:

users=User.all
users.each do |user|
  mail(:to => user.email, :subject => "Simple Test")
end

在控制器和类之间拆分工作可能如下所示:

控制器:

 if @ticket.save
    users=User.all
    users.each do |user|
      TicketMailer.ticketcreated_email(user).deliver
    end
    format.html { redirect_to @ticket, notice: 'Ticket was successfully created.' }

班级:

  def ticketcreated_email(user)
    mail(:to => user.email, :subject => "Simple Test")
  end
于 2013-10-08T20:46:34.160 回答
0

感谢@cschroed,我最终完成了这个过程

def create
@ticket = Ticket.new(params[:ticket])

respond_to do |format|
  if @ticket.save
    user=User.all
    user.each do |user|
       TicketMailer.ticketcreated_email(user).deliver
    end
    format.html { redirect_to @ticket, notice: 'Ticket was successfully created.' }
    format.json { render json: @ticket, status: :created, location: @ticket }
  else
    format.html { render action: "new" }
    format.json { render json: @ticket.errors, status: :unprocessable_entity }
  end
end
end
于 2013-10-08T21:26:07.323 回答