我正在尝试让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
有人可以帮忙吗?谢谢。
答案 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
您可能需要在每行的末尾添加换行符。