SORU
18 EYLÜL 2008, PERŞEMBE


csv dosyası olarak kayıtları döndürmek için nasıl raylar,

Basit bir veritabanı tablosu aradım "Kayıtları":

class CreateEntries < ActiveRecord::Migration
  def self.up
    create_table :entries do |t|
      t.string :firstName
      t.string :lastName
      #etc.
      t.timestamps
    end
  end

  def self.down
    drop_table :entries
  end
end

Nasıl bir CSV dosyası olarak Girdileri tablosunun içeriğini (ideal otomatik olarak Excel açık olacak şekilde) döndürür bir işleyici yazmak mı?

class EntriesController < ApplicationController

  def getcsv
    @entries = Entry.find( :all )

    # ??? NOW WHAT ????

  end

end

CEVAP
18 EYLÜL 2008, PERŞEMBE


FasterCSV kesinlikle gitmek için bir yoldur, ama eğer doğrudan Raylar app sunmak istiyorsanız, bazı yanıt Başlıkları da kurmak isteyeceksiniz.

Bir yöntem civarında dosya adı kurmak ve başlıklar için gerekli duruyorum:

def render_csv(filename = nil)
  filename ||= params[:action]
  filename  = '.csv'

  if request.env['HTTP_USER_AGENT'] =~ /msie/i
    headers['Pragma'] = 'public'
    headers["Content-type"] = "text/plain" 
    headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=0'
    headers['Content-Disposition'] = "attachment; filename=\"#{filename}\"" 
    headers['Expires'] = "0" 
  else
    headers["Content-Type"] ||= 'text/csv'
    headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 
  end

  render :layout => false
end

Bunun böyle olması benim denetleyicisi kullanarak yapar:

respond_to do |wants|
  wants.csv do
    render_csv("users-#{Time.now.strftime("%Y%m%d")}")
  end
end

Ve şuna benzer bir görünümü var: (generate_csv FasterCSV)

UserID,Email,Password,ActivationURL,Messages
<%= generate_csv do |csv|
  @users.each do |user|
    csv << [ user[:id], user[:email], user[:password], user[:url], user[:message] ]
  end
end %>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • George McCarron

    George McCar

    29 Mayıs 2013
  • mahalodotcom

    mahalodotcom

    8 HAZİRAN 2007