2016-09-21 48 views
0

按照GitHub Pageaxlsx宝石,我应该用这个语法来呈现XLSX视图文件并将其安装:。附接AXLSX以邮寄的Rails梅勒

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: "[email protected]", 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方法会影响邮件程序查看邮件程序尝试呈现的内容?在我的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:NilClass错误时xlsx视图试图引用报告中所定义的实例变量控制器。

回答

0

最后,这一切都归结为将控制器代码移动到一个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} 
-1

您是否尝试过传递布局:false?你使用的是什么版本的axlsx,axlsx_rails,rails和rubyzip?