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

时间:2012-03-27 23:19:30

标签: 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

有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:3)

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

因此,您需要弄清楚如何将用户列表转换为可以写入文本文件的表单,这称为序列化。啊,但是用什么格式? XML? JSON? YAML? ......还是可怕的CSV格式?有内置的类可以将ActiveRecord对象转换为各种格式,并使用gem来处理其他格式。所以我假设你会调用to_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

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