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

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • infiniTuts

    infiniTuts

    18 Ocak 2012