Une autre façon de le faire sans l'aide de FasterCSV:
Besoin de ruby csv bibliothèque dans un initializer comme config/initializers/dépendances.rb
require "csv"
Comme certains l'arrière-plan, le code suivant est basé hors de Ryan Bate du Formulaire de Recherche Avancée qui crée une ressource de recherche. Dans mon cas, la méthode show de la ressource de recherche renvoie les résultats de recherche enregistrés. Il répond également au format csv, et utilise un gabarit de vue pour le format de sortie souhaité.
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 spectacle.csv.erb fichier 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 de rapport, j'ai un lien pour exporter le rapport que l'utilisateur consulte. Ce qui suit est la link_to qui renvoie le csv version du rapport:
<%= link_to "Export Report", formatted_advertiser_search_path(@advertiser_search, :csv) %>