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

  • Dive In

    Dive In

    17 Temmuz 2013
  • Dylan Brenan

    Dylan Brenan

    22 Aralık 2009
  • Submissions101

    Submissions1

    23 ŞUBAT 2007