2012-08-13 85 views
-1

我正在使用rails 2.3.14和ruby 1.8.7,我想下載一個csv文件而不寫入任何目錄。直接下載一個csv文件而不寫入目錄

我的代碼:

def export 
    @news = News.find(:all, :conditions => ["updated_at >= ? and news_source_id != 1 and ready = 1", 1.week.ago]) 
    file_name = "Non_linksv_news_#{1.week.ago.strftime('%b-%d-%Y')}_to_#{Time.now.strftime('%b-%d-%Y')}.csv" 
    File.open(file_name, "w") do |file| 
     file_name << %w(Source Headline).to_csv 
     @news.each { |news| file_name << [news.news_source.name, news.news_headline].to_csv } 
    end 
    send_file file_name 
    end 

它的目錄,然後下載創建一個文件。我不想創建文件。

回答

0

解決

def export 
    ns = NewsSource.find_by_name 'Linksv', :select => :id 
    @news = News.find(:all, :conditions => ["updated_at >= ? and news_source_id != ? and ready = 1", 1.week.ago, ns.id]) 
    file_name = "linksv_news_#{1.week.ago.strftime('%b-%d-%Y')}_to_#{Time.now.strftime('%b-%d-%Y')}.csv" 
    csv = %w(Source Headline).to_csv 
    @news.each { |news| csv << [news.news_source.name, news.news_headline].to_csv } 

    send_data csv, :filename => file_name, :type => "text/csv" 
    end 

它會生成適當的方式csv文件,具有行和列

1

我們使用這種方法

def export  
    output = [["Source", "Headline"]] 
    @news.each do |a_new| 
    output << [a_new,news_source.name.to_s, a_new.news_headline.to_s] 
    end 
    respond_to do |format| 
    format.csv { 
     send_data output.to_csv, :type => "text/csv", :filename => "My news csv.csv" 
    } 
    end 
end 
+0

感謝答覆,但它顯示我在單行一切但我需要它像一個表cols和行 – RAJ 2012-08-13 11:38:55

+0

是否添加\ n?給我看一個輸出的例子,請 – pablorc 2012-08-13 12:04:19

+0

非常感謝@pablorc,但我已經解決了這個問題。 – RAJ 2012-08-13 12:23:36