Une autre façon de le faire sans utiliser FasterCSV:
Exiger le csv de rubis bibliothèque dans un fichier initialiseur comme config/initializers/dependencies.rb
require "csv"
comme certains arrière-plan le code suivant est basé sur Ryan Bate's Advanced Search Form qui crée une ressource de recherche. Dans mon cas, la méthode show de la ressource de recherche retournera les résultats d'une recherche précédemment enregistrée. Il répond également à csv et utilise un modèle de vue pour mettre en forme la sortie souhaitée.
def show
@advertiser_search = AdvertiserSearch.find(params[:id])
@advertisers = @advertiser_search.search(params[:page])
respond_to do |format|
format.html # show.html.erb
format.csv # show.csv.erb
end
end
Le fichier show.csv.erb se présente comme suit:
<%- headers = ["Id", "Name", "Account Number", "Publisher", "Product Name", "Status"] -%>
<%= CSV.generate_line headers %>
<%- @advertiser_search.advertisers.each do |advertiser| -%>
<%- advertiser.subscriptions.each do |subscription| -%>
<%- row = [ advertiser.id,
advertiser.name,
advertiser.external_id,
advertiser.publisher.name,
publisher_product_name(subscription),
subscription.state ] -%>
<%= CSV.generate_line row %>
<%- end -%>
<%- end -%>
Sur la version html de la page du rapport que j'ai un lien pour exporter le rapport que l'utilisateur consulte. Ce qui suit est le link_to qui retourne la version csv du rapport:
<%= link_to "Export Report", formatted_advertiser_search_path(@advertiser_search, :csv) %>
Au moins dans les versions les plus récentes de Rails, vous pouvez également utiliser 'entrée. tout à la place. –