将 AXLSX 视图附加到邮件 Rails Mailer
Attaching AXLSX view to mail Rails Mailer
根据 GitHub Page 的 axlsx
gem 我应该使用此语法将 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
方法会影响邮件程序试图呈现的邮件视图?在本地,我的 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
错误。
您是否尝试过传递 layout: false?您使用的是什么版本的 axlsx、axlsx_rails、rails 和 rubyzip?
最后,一切都归结为将控制器代码移动到 lib 文件中。通过这种方式,我在控制器中调用它来获取数据,如果它需要通过网络请求以及通过 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}
根据 GitHub Page 的 axlsx
gem 我应该使用此语法将 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
方法会影响邮件程序试图呈现的邮件视图?在本地,我的 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
错误。
您是否尝试过传递 layout: false?您使用的是什么版本的 axlsx、axlsx_rails、rails 和 rubyzip?
最后,一切都归结为将控制器代码移动到 lib 文件中。通过这种方式,我在控制器中调用它来获取数据,如果它需要通过网络请求以及通过 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}