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'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值