2013-05-21 3 views
3

Je travaille pour exporter des données CSV à partir de rails. Je suis ici le tutoriel: http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicastExportation de données CSV à partir de Rails

Dans mon contrôleur je:

def show 
    # @company is being provided correctly. 
    @groups = @company.groups 
    render text: @groups.to_csv 
    end 

Dans mon modèle group.rb:

def self.to_csv 
    Rails.logger.info "Hello World" 
    CSV.generate do |csv| 
     csv << column_names 
     all.each do |product| 
     csv << product.attributes.values_at(*column_names) 
     end 
    end 
    end 

Le problème est que le navigateur est tout ce qui suit la sortie :

#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# 

La méthode du modèle semble être ignorée, même après redémarre. Des idées ce qui ne va pas ici? Merci

+0

aussi, le modèle Rails.logger.info n'est pas connecté au courant Fichier journal nt .. – AnApprentice

Répondre

8

Le to_csv est une méthode de classe. Ce qui signifie que cela signifiait s'appeler Group.to_csv. Vous pouvez remplacer la signature de la méthode par quelque chose comme Group.to_csv(groups) à la place.

def self.to_csv(groups) 
    Rails.logger.info "Hello World" 
    CSV.generate do |csv| 
     csv << column_names 
     groups.each do |product| 
     csv << product.attributes.values_at(*column_names) 
     end 
    end 
    end 

Puis, en show

def show 
    # @company is being provided correctly. 
    @groups = @company.groups 
    render text: Group.to_csv(@groups) 
    end 
+3

Il n'y a rien de mal à utiliser les méthodes de classe sur les associations. Rails l'étend pour vous. http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html –

0

Une version rapide pour console de rails qui n'est pas pour prod mais juste d'avoir accès aux données dans Excel:

premier do:

print TableName.first.attributes.map{|a,v| a}.join(",") 

seconde chacune ne:

TableName.all.each{|t| print t.attributes.map{|a,v| a}.join(",") + "\n"}; nil 

copier le résultat de ce deux appel dans un fichier csv

Questions connexes