Rails:将二进制字段的内容保存到文件中

时间:2009-05-29 16:34:31

标签: ruby-on-rails binary-data

我有一个包含文件的二进制字段的模型。我想将此文件保存到磁盘,作为我需要执行的过程的一部分。出于某种原因,我找不到任何关于如何做到这一点。

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

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

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

我认为你需要定义一个不是ActiveRecord::Base的子类的模型类,并使用Ruby中的文件i / o支持为该类定义一个自定义save_to_file方法({{ 1}}类及其子类IO)。

File

答案 1 :(得分: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