将用户数据保存为CSV文件

时间:2017-10-15 09:52:57

标签: ruby class csv

我是红宝石的新人,所以请原谅我的顽皮。

我有一个类“User”,它有方法创建并显示所有用户需要在CSV文件中保存“用户”数据

这就是我试图做的事情

cmd & { wait $! | cmd2; }

当我打电话

{ cmd & wait $! ; } | cmd2

它返回我的用户数组中的数组,但是在调用时

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

它显示我的错误

User.all 

请帮助它如何正确地进行

1 个答案:

答案 0 :(得分:0)

User.all返回一个包含User及其属性的所有实例的数组,它是一个数组,并且您没有为Array对象定义save_to_csv

您可以尝试User.save_to_csv,这是打开CSV文件并在其上写下用户信息的类方法,但还有其他问题,其中包括'}&#39}。您的班级中没有@users个变量,因此它会取nil的值,而each的{​​{1}}方法不是nil:NilClass

所以我认为您可以使用all方法访问所有用户,然后进行迭代。

在此之后,您可以使用用户的数据推送到CSV文件中排列数组:

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

注意csv.puts无法工作。