Une autre façon de le faire sans utiliser FasterCSV :
Require la bibliothèque csv de ruby dans un fichier d'initialisation comme config/initializers/dependencies.rb
require "csv"
En guise de contexte, 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 renverra les résultats d'une recherche précédemment enregistrée. Il répond également au format csv et utilise un modèle de vue pour formater la sortie désiré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 ressemble à ce qui 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 de rapport, j'ai un lien pour exporter le rapport que l'utilisateur est en train de consulter. Voici le lien link_to qui renvoie la version csv du rapport :
<%= link_to "Export Report", formatted_advertiser_search_path(@advertiser_search, :csv) %>