Ruby On Rails 导出数据库至CSV文件

  • config/application.rb

require 'csv'
  • view: index.hml.erb

<p>
  Download:
  <%= link_to "CSV", products_path(format: "csv") %>
</p>

  • controller:  products_controller.rb

class ProductsController < ApplicationController
  def index
    @products = Product.order(:name)
    respond_to do |format|
      format.html
      format.csv { render text: @products.to_csv }
    end
  end
end

  • model: product.rb

class Product < ActiveRecord::Base
  attr_accessible :name, :price, :released_on
  
  def self.to_csv
    CSV.generate do |csv|
      csv << column_names
      all.each do |product|
        csv << product.attributes.values_at(*column_names)
      end
    end
  end
end


注意事项:

1. 修改model文件后,需要重启服务器,不然无法使用新建的方法。

2. 如果需要下载CSV文件,可以使用send_data, 具体如下:

class ProductsController < ApplicationController
  def index
    @products = Product.order(:name)
    respond_to do |format|
      format.html
      format.csv { send_data @products.to_csv }
    end
  end
end

3. 如果需要自定义CSV文件的名称,如加上时间戳,具体如下:

class ProductsController < ApplicationController
  def index
    @products = Product.order(:name)
    time = Time.new.strftime("%Y%m%d%H%M%S")
    filename = product + "_" + time + ".csv"
    respond_to do |format|
      format.html
      format.csv { send_data @products.to_csv, filename: filename }
    end
  end
end


参考链接:http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicast

源代码:http://media.railscasts.com/assets/episodes/sources/362-exporting-csv-and-excel.zip


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值