【问题标题】:Attaching AXLSX view to mail Rails Mailer将 AXLSX 视图附加到邮件 Rails Mailer
【发布时间】:2016-09-21 15:07:55
【问题描述】:

根据axlsx gem 的GitHub Page,我应该使用此语法将 xlsx 视图呈现到文件并附加它:

xlsx = render_to_string handlers: [:axlsx], formats: [:xlsx], template: "users/export", locals: {users: users}
attachments["Users.xlsx"] = {mime_type: Mime::XLSX, content: xlsx}

这是我的邮寄方式:

xlsx = render_to_string(handlers: [:axlsx], formats: [:xlsx], template: 'v1/reports/reportxyz', params: {start_date: '2016-09-12', period: 'weekly'})
attachments["report.xlsx"] = {content: xlsx, mime_type: Mime::XLSX}
mail(to: "my@email.address", subject: "Report", format: "text")

但是,当我尝试调用 mailer 方法时出现此错误:

ActionView::MissingTemplate: Missing template layouts/mailer with {:locale=>[:en], :formats=>[:xlsx], :variants=>[], :handlers=>[:axlsx]}. Searched in:
  * "path/to/project/app/views"

为什么render_to_string 方法会影响邮件程序试图呈现的邮件程序视图?在本地,我的app/views/layouts 文件夹中没有mailer.xlsx.axlsx 文件,而是我尝试将mailer.text.erb 与其他电子邮件一起使用。

编辑

我将渲染线改为xlsx = render_to_string(template: 'v1/reports/azamara_social', params: {start_date: '2016-09-12', period: 'weekly'})

现在它似乎尝试渲染 xlsx 视图,但当 xlsx 视图尝试引用报告控制器中定义的实例变量时,当然会出现 nil:NilClass 错误。

【问题讨论】:

    标签: ruby-on-rails ruby actionmailer axlsx


    【解决方案1】:

    您是否尝试过传递 layout: false ?您使用的是什么版本的 axlsx、axlsx_rails、rails 和 ruby​​zip?

    【讨论】:

    • 这就是答案
    【解决方案2】:

    最后,这一切都归结为将控制器代码移动到一个 lib 文件中。这样我在控制器中调用它来获取数据,如果它需要通过 web 请求以及通过我重新创建视图模板正在寻找的 @variables 的 Mailer 方法呈现。

    这是报告邮件方法的完成的主要部分:

    data = ReportUtils.get_data(args)
    xlsx = render_to_string(template: 'path/to/report.xlsx', locals: {:@period => period, :@date_ranges => data[:date_ranges], :@data => data[:data]})
    attachments["report.xlsx"] = {content: xlsx, mime_type: Mime::XLSX}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多