1.controller层代码:
def index #导出功能
@products = Product.order(:name)
respond_to do |format|
format.html
format.csv { send_data @products.to_csv }
format.xls # { send_data @products.to_csv(col_sep: "\t") }
end
end
def import_file
Product.import(params[:file])
render :text=>"ok"
end
2.model层代码:(product.rb)
#导出功能
def self.to_csv(options = {})
CSV.generatee(options) do |csv|
csv << column_names
all.each do |product|
csv << product.attributes.values_at(*column_names)
end
end
end
#导入功能
def self.import file #这里的file为页面通过multipart编码传递过来的文件
CSV.foreach(file.path, encoding: "GBK:UTF-8", headers: true) do |row|
if !row[3].blank?
product = Product.new(
:yqf_activity_id=>row[0]||0,
:name=>row[1]||""
)
product.save!
end
end
end
3.views代码:
<!--导出-->
<p>
Download:
<%= link_to "CSV", products_path(format: "csv") %> |
<%= link_to "Excel", products_path(format: "xls") %>
</p>
<!--导入-->
<%=form_tag ..., :multipart=>true do %>
<%=file_field_tag "file", nil%>
<%=submit_tag "提交"%>
<%end%>
4.在config/application.rb文件中添加
require 'csv'