2017-10-15 3 views
1

Je suis nouveau en rubis alors s'il vous plaît pardonner l'noobishness.Enregistrer les données des utilisateurs au fichier CSV

J'ai une classe « Utilisateur » qui ont des méthodes de créer et de montrer tous les utilisateurs doivent enregistrer « utilisateurs » des données dans le fichier CSV

C'est ce que j'ai essayé de faire

class User 
    attr_accessor :name, :age, :email 

    def initialize(name:, age:, email:) 
    @name = name 
    @age = age 
    @email = email 
    end 

    def create 
    @users = [@name, @age, @email] 
    end 

    def self.all 
    ObjectSpace.each_object(self).map(&:create) 
    end 

    def self.save_to_csv 
    CSV.open(users.csv, "w") do |csv| 
    @users.each { |i| csv.puts "#{i.name}, #{i.age}, #{i.email}" } 
    end 
end 
end 

Quand j'appelle

User.all 

il me retourne des tableaux dans le tableau de mes utilisateurs, mais lorsque l'appel

User.all.save_to_csv 

il me montre une erreur

<main>': undefined method `save_to_csv' for [["user1"], ["user2"], etc] 

S'il vous plaît, aider à la façon dont il est devrait faire correctement

Répondre

0

User.all retourne un tableau de tous les instancies de l'utilisateur et de ses attributs, il est un tableau, et vous ne l'avez pas save_to_csv pour les objets Array.

Vous pouvez essayer User.save_to_csv, c'est la méthode de classe pour ouvrir le fichier CSV et écrire l'information de l'utilisateur sur, mais il y a un autre problème, il n'y a pas de variable @users dans votre classe, il va prendre la valeur de nil et il n'y a pas each méthode pour nil:NilClass. Donc, je pense que vous pourriez utiliser la méthode all, pour accéder à tous les utilisateurs, puis pour itérer.

Après cela, vous pouvez pousser à la ligne du fichier CSV du tableau avec les données de l'utilisateur:

def self.save_to_csv 
    CSV.open('users.csv', 'w') do |csv| 
    all.each { |user| csv << user } 
    end 
end 

Remarque csv.puts ne fonctionnera pas.

+0

Je pense que je devrais changer la méthode "all", mais je ne comprends pas comment le faire correctement –

+0

Dans la méthode 'self.save_to_csv'' all.each 'fait référence à la méthode 'self.all' appliquant' chaque ', donc en appelant la méthode comme' User.all.save_to_csv', vous pouvez faire 'User.save_to_csv' sans méthodes de chaînage. –