Вызов def в Ruby для экспорта CSV - PullRequest
0 голосов
/ 03 ноября 2010

В настоящее время у меня есть некоторый код, который я использовал для экспорта таблицы из данных, которые у меня есть

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 голосов
/ 08 ноября 2010

Спасибо за вашу помощь.Я видел вашу ссылку и придумал это:

@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
0 голосов
/ 03 ноября 2010

Я не понимаю, почему вы говорите о will_paginate ...

Но если вы хотите отправить данные или отправить файл с контроллера, вы должны посмотреть методы send_data и send_file:

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

...