2009-05-29 112 views
2

我有一个包含文件的二进制字段的模型。我想将此文件保存到磁盘,作为我需要执行的过程的一部分。出于某种原因,我无法找到任何有关如何操作的信息。Rails:将二进制字段的内容保存到文件中

该模型包含一个文件名字段和一个file_contents字段。我想要做这样的事情:

model = SomeModel.find :first 
model.file_contents.save_to_file(model.filename) 

任何帮助,将不胜感激!

回答

2

我不知道你为什么要在文件内容而不是模型上调用#save_to_file。由于您将file_contents定义为AR属性,因此我想您想将其保存到数据库,并将其保存到磁盘。如果是这样的话,你可以像这样的方法简单地添加到您的模型:

class YourModel < ActiveRecord::Base 
    # ... your stuff ... 
    def save_to_file 
    File.open(filename, "w") do |f| 
     f.write(file_contents) 
    end 
    end 
end 

然后你会简单地做:

obj = YourModel.find(:first) 
obj.save_to_file 
2

在ActiveRecord中,用于在迁移中定义列类型的:binary类型将映射到数据库中的blob类型。所以这不会让你保存到一个文件。

我认为你需要定义一个模型类,它是不是ActiveRecord::Base子类,并使用该文件在Ruby中的I/O支持(IO类和它的子类,File)定义为类的定制save_to_file方法。

class SomeModel 
attr_accessor :file 
attr_accessor :contents 

def initialize 
    @file = File.new("file.xyz", "w") 
end 

def save_and_close 
    @file << contents 
    @file.close 
end 
end 
相关问题