2011-01-03 12 views
14

Chcę dać moim użytkownikom możliwość eksportu tabeli do pliku CSV.Szyny - eksport CSV: monit o pobranie pliku

Więc w moim kontrolera, dodałem na początku pliku:

respond_to :html, :js, :csv 

Jestem również ustawienie nagłówki jeśli żądany format csv:

if params[:format] == 'csv' 
    generate_csv_headers("negotiations-#{Time.now.strftime("%Y%m%d")}") 
end 

Kod generate_csv_headers (w application_controller) jest:

def generate_csv_headers(filename) 
    headers.merge!({ 
     'Cache-Control'    => 'must-revalidate, post-check=0, pre-check=0', 
     'Content-Type'    => 'text/csv', 
     'Content-Disposition'  => "attachment; filename=\"#{filename}\"", 
     'Content-Transfer-Encoding' => 'binary' 
    }) 
    end 

Stworzyłem również widok o nazwie index.csv.erb wygenerować mój plik:

<%- headers = ["Id", "Name"] -%> 
<%= CSV.generate_line headers %> 
<%- @negotiations.each do |n| -%> 
<%- row = [ n.id, 
      n.name ] -%> 
<%= CSV.generate_line row %> 
<%- end -%> 

nie mam żadnych błędów, ale to po prostu wyświetla zawartość pliku CSV, a będę oczekiwać wiersz z przeglądarki, aby pobrać plik.

Wiele czytałem, ale nie mogłem znaleźć niczego, co by działało. Masz pomysł?

dziękuję, str.

+0

dobre dyskusje na ten temat w [niniejszego SO wątku] (http://stackoverflow.com/questions/94502/in-rails-how-to-return-records-as-a-csv -file) – zetetic

Odpowiedz

10

Nadal nie jestem pewien, dlaczego to rozwiązało problem, ale tak się stało.

Zmieniłem link w celu

<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%> 

i teraz działa!

0

Być może zainteresuje Cię ten klej, który stworzyłem o nazwie shaper CSV, który pozwala na tworzenie wyników CSV za pomocą naprawdę miłej Ruby DSL.

Zajmie się również ustawianiem nagłówków odpowiedzi poprawnie, przy jednoczesnym zezwoleniu na niestandardową nazwę pliku.

https://github.com/paulspringett/csv_shaper

Powiązane problemy