将table的数据导出为csv

项目中经常会有这样的usecase,把一个table中的数据导出为csv,用fastercsv这个gem可以快速完成这个功能。

首先放一个导出csv的链接

= link_to 'Export to CSV', participants_path(:format => :csv)

然后在controller中生成相应的csv,并发送给用户

def index
  @participants = Participant.all

  respond_to do |format|
    format.csv {
      participants_csv = FasterCSV.generate do |csv|
        csv  ["First Name", "Last Name", "Age", "Gender", "Address", "Phone", "Email"]
        @participants.each do |p|
          csv  [p.first_name, p.last_name, p.age, p.gender, p.address, p.phone, p.email]
        end
      end
      send_data participants_csv, :type => 'text/csv', :filename => 'participants.csv'
    }
  end
end

其中用FasterCSV快速创建好csv数据,再通过send_data发送给客户端就可以了

Posted in  rails


blog comments powered by Disqus
Fork me on GitHub