Sql 如何将rails数据库的内容写入外部文件

Sql 如何将rails数据库的内容写入外部文件,sql,ruby-on-rails,database,external,Sql,Ruby On Rails,Database,External,我正在尝试让rails将数据库的内容发送到外部文本文件。 我希望在每次创建新用户时都这样做 但是,当我尝试在user.rb模型文件中执行以下操作时 before_save :write_data def write_data() File.open("data.txt", "w") do |myfile| myfile.write(User.all) end end 它不会写入数据库的实际内容,而是显示如下内容 User:0x109858540 有人能帮忙吗

我正在尝试让rails将数据库的内容发送到外部文本文件。 我希望在每次创建新用户时都这样做

但是,当我尝试在user.rb模型文件中执行以下操作时

before_save :write_data

def write_data()
    File.open("data.txt", "w") do |myfile|
        myfile.write(User.all)
    end
end
它不会写入数据库的实际内容,而是显示如下内容

User:0x109858540

有人能帮忙吗?谢谢

User.all返回一个ruby对象,很可能
write
方法会说“嘿,我期待的是一个字符串,这不是一个,所以我将调用
to_s
方法”

因此,您需要弄清楚如何将用户列表转换为某种形式,以便写入文本文件,这就是所谓的序列化。啊,但是是什么形式??XML?JSON?亚马尔。。。还是可怕的CSV格式?有内置类将ActiveRecord对象转换为各种格式,还有gems处理其他格式。因此,我假设您将调用一个
来\u something
方法

另外,
User.all
表示要将整个用户表(每条记录)写入相应的文件。(我想你可能会问自己为什么,但那是另一个话题)。因此,您可能需要遍历每个用户记录

代码可能看起来更像

def write_data   # It's ruby -- don't need no stinkin' empty parenthesis!! :-)
  my_file = File.open("data.txt", "w")
  User.all.each do |u|
    my_file.write u.to_something
  end
end

您可能需要在每行末尾添加一个换行符。

您可能会发现运行
script/console
,然后运行
require'user'很有帮助;User.all()