在Ruby中调用def以导出CSV

时间:2010-11-03 07:34:00

标签: ruby-on-rails ruby fastercsv function

我目前有一些代码,用于从我拥有的数据中导出表格

require 'fastercsv'
def dump_csv
  @users = User.find(:all, :order => "lastname ASC")
  @outfile = "members_" + Time.now.strftime("%m-%d-%Y") + ".csv"

  csv_data = FasterCSV.generate do |csv|
    csv << [
    "Last Name",
    "First Name",
    "Username",
    "Email",
    "Company",
    "Phone",
    "Fax",
    "Address",
    "City",
    "State",
    "Zip Code"
    ]
    @users.each do |user|
      csv << [
      user.lastname,
      user.firstname,
      user.username,
      user.email,
      user.company,
      user.phone,
      user.fax,
      user.address + " " + user.cb_addresstwo,
      user.city,
      user.state,
      user.zip
      ]
    end
  end

  send_data csv_data,
    :type => 'text/csv; charset=iso-8859-1; header=present',
    :disposition => "attachment; filename=#{@outfile}"

  flash[:notice] = "Export complete!"
end

我的问题是如何从我的视图中调用它,并且这将与will_pagination一起使用。我知道FasterCVS使用ActiveRecord创建表,因此在尝试组织表时,will_paginiation将没有任何用处。

2 个答案:

答案 0 :(得分:0)

我不明白你为什么要谈论will_paginate ......

但是如果你想发送数据或从控制器发送文件,你应该看看方法send_data和send_file:

http://api.rubyonrails.org/classes/ActionController/Streaming.html

答案 1 :(得分:0)

感谢您的帮助。我看到了你的链接并想出了这个:

@lists = Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions =>  ["name || description  LIKE ?", "%#{params[:selection]}%"])

    csv_string = FasterCSV.generate do |csv|
      csv << ["Status","Name","Summary","Description","Creator","Comment","Contact Information","Created Date","Updated Date"]

      @lists.each do |project|
        csv << [project.status, project.name, project.summary, project.description, project.creator, project.statusreason, project.contactinfo, project.created_at, project.updated_at]
      end
    end

    filename = Time.now.strftime("%Y%m%d") + ".csv"
    send_data(csv_string,
      :type => 'text/csv; charset=utf-8; header=present',
      :filename => filename)
  end