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

  • Showtime

    Showtime

    21 HAZİRAN 2006
  • The Dubstep FX

    The Dubstep

    5 Mart 2011
  • TheMasterOfHell100

    TheMasterOfH

    13 AĞUSTOS 2011