ActionMailer方法返回nil

时间:2015-01-15 10:19:28

标签: ruby-on-rails actionmailer

我为Rails应用程序创建了一个简单的票务系统。我现在需要在创建新票证时发送电子邮件。因此我创建了以下Mailer类:

应用程序/邮寄者/ 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

应用程序/邮寄者/ 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):
app/models/ticket.rb:20:in
send_ticket_mail&#39;
  app / controllers / tickets_controller.rb:21:在'create&#39;

我试图直接从控制器调用该方法,但结果是一样的。我错过了什么?

2 个答案:

答案 0 :(得分:0)

你可以试试这个

  def send_ticket_mail()
    TicketMailer.new.new_ticket(self).deliver
   end

答案 1 :(得分:0)

基本上这个问题是由initialized类中的ApplicationMailer方法引起的。如果它被移除并且url以常量存储,则事物按预期运行:

class ApplicationMailer < ActionMailer::Base
  default to: Proc.new { "admin@domain" },
  from: 'admin@domain'

  BASE_URL = 'http://app.domain'
end

当然,必须修改TicketMailer类才能使用常量。