我为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):
send_ticket_mail&#39;
app/models/ticket.rb:20:in
app / controllers / tickets_controller.rb:21:在'create&#39;
我试图直接从控制器调用该方法,但结果是一样的。我错过了什么?
答案 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
类才能使用常量。