繁体   English   中英

将AXLSX视图附加到邮件Rails Mailer

[英]Attaching AXLSX view to mail Rails Mailer

根据axlsx gem的GitHub页面 ,我应该使用这种语法将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")

但是,当我尝试调用邮件程序方法时,我收到此错误:

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

为什么render_to_string方法会影响邮件程序正在尝试呈现的邮件程序? locgially我的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视图但当然得到nil:NilClassxlsx视图尝试引用报表控制器中定义的实例变量时出现nil:NilClass错误。

你试过传递布局:假吗? 您使用的是axlsx,axlsx_rails,rails和rubyzip的哪些版本?

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

以下是报告邮件方法的完成部分:

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM