无法将表导出到Excel中

时间:2012-08-09 07:08:23

标签: ruby-on-rails export-to-excel

我正在关注导出表格http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicast并按照所有步骤操作。

我的aplication.rb:

 require 'csv'

在mime_types.rb中添加了MimeType:

          Mime::Type.register "application/xls", :xls

我的控制器:

def index

if params[:report] && params[:report][:start_date] && params[:report][:end_date]
 start_date = params[:report][:start_date]
 end_date = params[:report][:end_date]
 @financial_reports = current_user.financial_reports.where(:created_at => start_date.to_date..end_date.to_date)

 respond_to do |format|
  format.html # index.html.erb
  format.csv { send_data @financial_reports.to_csv }
  format.xls
  format.json { render json: @financial_reports }
 end
end

在我的模特中:

def self.to_csv(options = {})
  CSV.generate(options) do |csv|
  csv << column_names
  all.each do |product|
    csv << product.attributes.values_at(*column_names)
  end
end

最后 - 视图中的链接:

<%if @financial_reports%>  
 Download:
 <%= link_to "CSV", financial_reports_path(format: "csv") %> |
<%= link_to "Excel", financial_reports_path(format: "xls") %>
 ...
 <%end%>

当我点击Excel链接时给出错误:

         undefined method `each' for nil:NilClass

但是我看到表格中的数据(html)!

另外,当我点击CSV时:

    Template is missing

我在配置文件中添加了一些内容后重启了我的应用程序。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:3)

您的代码中存在少量错误

@financial_reports = current_user.financial_reports.where(:created_at => start_date.to_date..end_date.to_date)

您正在根据开始日期和结束日期过滤财务报告。它会返回一个financial_reports集合。所以你不能直接调用@ financial_reports.to_csv。另一种方法是将其作为

等方法的参数发送
 format.csv { send_data FinancialReport.to_csv(@financial_reports) }

并在模型中

def self.to_csv(reports,options = {})
  CSV.generate(options) do |csv|
  csv << column_names
  reports.each do |product|
    csv << product.attributes.values_at(*column_names)
  end
end

模板丢失 - 当您没有相应的视图文件时会发生错误

检查您是否有参考http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicast

中指定的/app/views/products/index.xls.erb文件