2012-02-26 92 views
3

我需要保存有关将数据库中的每封电子邮件发送到我的客户端以进一步分析的信息。所以我试图在Observer中做到这一点,但我需要关于发票的信息。 所以我有梅勒:将其他信息传递给ActionMailer Observer

class ClientMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def remind(client, invoices) 
    @client = client 
    @company = @client.company 
    @invoices = invoices.to_a 

    @template = t('message.template') 

    @text = liquid_parse @template 
    @html = markdown_parse @text 

    mail(:to => @client.email, :subject => t('message.title')) do |format| 
     format.html 
     format.text 
    end 
    end 

    private 
    def markdown_parse(text) 
     markdown = Redcarpet::Markdown.new Redcarpet::Render::HTML, 
     :autolink => true, :space_after_headers => true 
     markdown.render text 
    end 

    def liquid_parse(text) 
     renderer = Liquid::Template.parse text 
     renderer.render 'company' => @company, 'invoice' => @invoice, 'client' => @client 
    end 
end 

而问题是:如何通过@invoices到的ActionMailer观察员?

回答

8

我已经通过自己在邮件中加入了这事

headers 'X-Invoice-IDs' => @invoices.map(&:id).join(';') 

然后在观察者

ids = message.header['X-Invoice-IDs'].to_s.split ';' 

在那里我已经得到了所有发票的ID在我的观察。

编辑

PRUG周四会议结束后我带着超载delivery方法,而不是使用观察者的想法。它将与Rails 4兼容并且更易于使用(因为我不需要传递额外的头文件,我将只使用实例变量)。