Rails 下载文件

虽然下载文件有 Rails 默认的 send_datasend_file 方法,还有像 axlsx_rails 这样的第三方库。但是我仍然比较倾向于使用 Spreedsheet XML 的方式去开发下载文件的功能。

配置 config/initializers/mime_types.rb 文件,使 Rails 能够支持导出文件的后缀名。

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

建立 download 方法,并配置好路由。

# app/controllers/orders_controller.rb
def download
  @orders = Order.where(created_at: '2019-01-01'.to_time..'2019-02-01'.to_time)
  respond_to do |format|
    format.csv { send_data @orders.to_csv }
    format.xls { headers["Content-Disposition"] = 'attachment; filename=orders.xls' }
  end
end
# app/models/order.rb
def self.to_csv(options = {})
  CSV.generate(options) do |csv|
    csv.tap do |csv_element|
      all.each do |order|
        csv_element << order.attributes.values_at(*column_names)
      end
    end
  end
end

创建 app/views/orders/download.xls.erb 文件,编写表格内容。



  
    
  
  
    
        订单名称
        订单数量
        订单金额
        购买用户
        联系电话
        订单创建时间
      
      <% @orders.each do |order| %>
        
          <%= order.name %>
          <%= order.count %>
          <%= order.amount %>
          <%= order.user.nickname %>
          <%= order.user.mobile %>
          <%= order.created_at.strftime('%Y-%m-%d %H:%M:%S') %>
        
      <% end %>
    

现在启动你的 Rails 应用,访问 http://localhost:3000/orders/download.xls 就可以导出订单报表。访问 http://localhost:3000/orders/download.csv 可以导出 CSV 文件。

参考文档

  • Rails Guides
  • http://railscasts.com/episodes/362-exporting-csv-and-excel

你可能感兴趣的:(Rails 下载文件)