rails 导入导出csv文件及编码问题

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'

你可能感兴趣的:(Rails)