2016-09-21 61 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?