如何将数据从另一个 ruby 文件添加到一个 ruby 文件

How do I add data to one ruby file from another ruby file

我有一个名为 database.rb 的文件,我想保存一份所有已输入联系信息的用户的列表。每次我 运行 名为 newuser.rb 的文件时,我想将该用户添加到 database.rb 文件。

这是 new_user.rb 文件:

 class Person
  attr_accessor :name, :email

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

puts "What is your name?"
name = gets.chomp
puts "What is your email?"
email = gets.chomp

user = Person.new(name, email, Time.now)

database.rb 文件只是一个空数组,我想将新用户一一添加到其中:

[]

我试过在 new_user 中做这样的事情:

new_user = []
new_user << user
f = File.new('database.rb', 'w')
f.write(new_user)

但这只是替换了 database.rb 文件中的当前数据。

我怎样才能继续向 `database.rb' 中的数组添加内容?用户列表最终将有大约 2,000 个 Person 对象。

或者,这个问题是不是有更好的方法来完成我想做的事情,而我只是以错误的方式思考整个问题?我也很想听听对此的评论。

Or, is this an problem where there is a better way to accomplish what I'm trying to do and I am just thinking about the whole problem the wrong way? I'd love to hear comments on this as well.

我认为完成您正在查看的内容的最佳方法是使用真实的数据库,例如 SQLite(如@tadman 所建议)。稍后您可能想要添加除姓名和电子邮件之外的更多内容,再加上存储数以千计的不同项目并快速轻松地取出它们,这就是数据库的用途:)

如果您现在学习这项技能,您可以re-use在未来的项目中使用它!

我刚刚用谷歌搜索 'ruby sqlite tutorial' 并找到了这个:http://zetcode.com/db/sqliteruby/connect/

祝您一路顺风,感谢您的开放!

认为您混淆了数据存储和检索。您的数据可以以任何形式存储(纯文本文件、数据库等),您的代码应该访问存储介质,提取数据并将其转换为您可以使用的形式(例如数组)

使用数据库将使您能够更快地检索数据并更可靠地管理数据,但代价是必须设置数据库并在程序中包含数据库功能。

将数据存储在平面文件中要简单得多,您可以使用任何编辑器打开文件查看数据。但是,随着数据量的增加,这会变慢很多。检索 2k 条记录可能需要几秒钟,而数据库则需要几毫秒。如果您的数据达到数十万条记录,预计需要等待几分钟。

假设您仍想继续使用平面文件来存储数据,则需要确定存储数据的格式。一些常见的格式是纯文本 (.txt)、CSV (.csv) 和 YAML(.yml)。不建议使用 Ruby 文件 (.rb) 来存储数据,因为 Ruby 文件通常存储代码。

Ruby 附带了几个库,可帮助您将数据保存和加载到平面文件中。我建议您先尝试 YAML::Store。界面非常简单,它为您提供了一个可读性很好的 YAML 文件。您以后可以随时将其转换为更高效的东西。

https://ruby-doc.org/stdlib-2.5.3/libdoc/yaml/rdoc/YAML/Store.html

https://redpanthers.co/pstore-ruby-standard-library/