- 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