【发布时间】:2015-01-15 10:19:28
【问题描述】:
我为 Rails 应用程序创建了一个简单的票务系统。我现在需要在创建新票证时发送一封电子邮件。因此,我创建了以下 Mailer 类:
app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default to: Proc.new { "admin@domain" },
from: 'admin@domain'
def initialize(arg0, arg1)
@base_url = 'http://app.domain'
end
end
app/mailers/ticket_mailer.rb
class TicketMailer < ApplicationMailer
def new_ticket(ticket)
@ticket = ticket
@url = @base_url + '/tickets/' + @ticket.id.to_s
mail(subject: "New Ticket: #{@ticket.title}")
end
end
并修改了Ticket模型:
class Ticket < ActiveRecord::Base
belongs_to :user
belongs_to :ticket_status
belongs_to :ticket_type
has_many :ticket_follow_ups
after_create :send_ticket_mail
def send_ticket_mail()
TicketMailer.new_ticket(self).deliver
end
end
当我尝试创建新票时,我得到以下异常:
NoMethodError(未定义方法
deliver' for nil:NilClass):send_ticket_mail'
app/models/ticket.rb:20:in
app/controllers/tickets_controller.rb:21:in `create'
我尝试直接从控制器调用该方法,但结果是一样的。我错过了什么?
【问题讨论】:
-
TicketMailer.new.new_ticket(self).deliver试试这个
标签: ruby-on-rails actionmailer